Javascript if(obj中的道具)和if(obj[prop])之间的差异?

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

我正在通过TestDome.com工作,遇到了这个问题

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

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

我的解决办法是:

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
检查属性的名称。谢谢!这正是问题所在,谢谢!这正是问题所在。