Javascript if(obj中的道具)和if(obj[prop])之间的差异?
我正在通过TestDome.com工作,遇到了这个问题 实现removeProperty函数,该函数接受对象和 属性名称,并执行以下操作: 如果对象obj具有属性prop,则该函数将删除 属性,并返回true;在所有其他情况下 返回false 我的解决办法是:Javascript if(obj中的道具)和if(obj[prop])之间的差异?,javascript,Javascript,我正在通过TestDome.com工作,遇到了这个问题 实现removeProperty函数,该函数接受对象和 属性名称,并执行以下操作: 如果对象obj具有属性prop,则该函数将删除 属性,并返回true;在所有其他情况下 返回false 我的解决办法是: function removeProperty(obj, prop) { if (obj[prop]) { delete obj[prop]; return true; } else { return fa
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
假设你有一个目标
const a = {apple: 0}
在这种情况下,a['apple']
将是虚假的,而a中的as“apple”将是真实的
因此,如果要删除某个密钥,只需直接删除该密钥即可。我相信您甚至不需要在删除它之前检查它。假设您有一个对象
const a = {apple: 0}
在这种情况下,a['apple']
将是虚假的,而a
中的as“apple”将是真实的
因此,如果要删除某个密钥,只需直接删除该密钥即可。我相信您甚至不需要在删除它之前检查它。区别如下:
obj={
道具:1
};
//从对象检索属性
console.log(obj['prop']);//1.
//检查道具是否位于obj对象中
console.log('prop'在obj中);//正确
区别如下:
obj={
道具:1
};
//从对象检索属性
console.log(obj['prop']);//1.
//检查道具是否位于obj对象中
console.log('prop'在obj中);//如果({a:0}['a'])…
为假,如果({a:0})中的('a')
为假。移除属性({foo:0},'foo')
应该返回true,但它在代码中返回false。与{foo:false}
相同,{foo:undefined}
等。obj[prop]
指向对象中的值,而prop-in-obj
检查属性的名称。如果({a:0}['a'])…
为false,如果({a:0})中的('a')为false,if)
不是。removeProperty({foo:0},'foo')
应该返回true,但它在代码中返回false。与{foo:false}
,{foo:undefined}
等相同。obj[prop]
指向对象中的值,而prop in obj
检查属性的名称。谢谢!这正是问题所在,谢谢!这正是问题所在。