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

时间:2018-10-12 17:56:41

标签: javascript

我正在通过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

2 个答案:

答案 0 :(得分:1)

区别如下:

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']检索的值强制为false,则if块将不会运行。例如:

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');
}

答案 1 :(得分:0)

假设您有一个对象

const a = {apple: 0}

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

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