2017-01-10 3 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 проверяет, является ли значение undefined. in проверяет, является ли объект содержит ключ, значение которого до сих пор может быть undefined:

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

@MaxZoom Я думаю, что вы ошибаетесь, массивы используют индексы. Пара ключей \ property: value применяется к объекту Object. Именование взаимозаменяемо. Вы можете использовать их оба. Но между ними есть небольшая разница. –

+0

@BekimBacaj Я добавил новое сообщение, чтобы показать разницу – MaxZoom

0

Согласно официальному documentation оператора in проверяет указанное свойство существует в данном объекте.
Ниже кода показывает, что существует разница между property и key:

// 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));

Смежные вопросы