2017-01-10 72 views
0

爲什麼會使用in而不是!== undefined來檢查一個對象是否包含密鑰? 例如:`!== undefined`和`in`之間的區別

var obj = {}; 
obj.a !== undefined; // false 
'a' in obj; // false 

有什麼區別?

+0

你剛纔問及在同一分鐘內回答你的問題? – Loaf

+0

@Loaf是的,http://stackoverflow.com/help/self-answer –

+0

@Loaf這實際上是鼓勵,但不是在互聯網上可以找到答案的瑣碎問題 –

回答

0

!== undefined檢查值是否爲undefinedin檢查如果一個對象包含一個密鑰,其值仍然可以undefined

var obj = { 
    a: undefined, 
}; 
obj.a !== undefined; // false 
'a' in obj; // true 
+0

@MaxZoom我認爲你錯了,數組使用索引。 key \ property:value對都適用於Object對象。命名是可以互換的。你可以同時使用它們。但是,它們之間也有細微的差別。 –

+0

@BekimBacaj我添加了一個新帖子來顯示區別 – MaxZoom

0

作爲每官方documentation操作者如果in檢查指定的屬性在一個給定的對象是否存在。
下面的代碼說明有propertykey之間的差異:

// define Point object 
 
function Point() { 
 
    this.xPos = 0; 
 
    this.yPos = 0; 
 
} 
 

 
// Add new property 
 
Object.defineProperty(Point.prototype, "position", { 
 
    get: function() { 
 
    return "X: " + this.xPos + " Y: " + this.yPos; 
 
    }, 
 
    set: function(thePoint) { 
 
    var parts = thePoint.split(", "); 
 
    this.xPos = parts[0] || ""; 
 
    this.yPos = parts[1] || ""; 
 
    } 
 
}); 
 

 
var aPoint = new Point(); 
 
aPoint.position= "10, 20"; 
 
console.log("Point coordinates " + aPoint.position); 
 
console.log("Point has position: " + ('position' in aPoint)); 
 
console.log("Point keys: " + Object.keys(aPoint));