if(prop in obj)和if(obj[prop])之间的区别?



我正在研究 TestDome.com 并遇到了这个问题。

实现 removeProperty 函数,该函数接受一个对象和 属性名称,并执行以下操作:

如果对象 obj 具有属性属性 prop,则该函数将删除 属性并返回 true;在所有其他情况下,它 返回假。

我的解决方案是这样的:

function removeProperty(obj, prop) {
if (obj[prop]) {
delete obj[prop];
return true;
} else {
return false;    
}
}

测试说这不起作用,他们的解决方案是:

function removeProperty(obj, prop) {
if (prop in obj) {
delete obj[prop];
return true;
} else {
return false;
}
}

对于我的生活,我无法弄清楚为什么我的解决方案是错误的。

编辑:更多示例。

const a = { b: 'c'};
if(a['b']) {console.log(true);} //true
if('b' in a) {console.log(true);} //true

区别如下:

obj = {
prop: 1
};
// retrieves the property from the object
console.log(obj['prop']);    // 1
// checks if prop is in obj object
console.log('prop' in obj);     // true

对于 if 语句,两者的计算结果都将为 true。但是,如果从obj['prop']检索的值被强制falseif块将不会运行。例如:

obj = {
prop: 0
};
// 0 convert to false so 
if (obj['prop']) {
console.log('executed 1');
}
// prop is a property of obj so 
// 'prop' in obj will evaluate to true
if ('prop' in obj) {
console.log('executed 2');
}

假设你有一个对象

const a = {apple: 0}

在这种情况下,a['apple']是假的,而"apple" in a是真实的。

因此,如果要删除某些密钥,只需直接删除该密钥即可。我相信您甚至不需要在删除它之前检查它。

最新更新