delete operator - 如果对象中不存在属性,为什么返回true值而不是false?

时间:2017-01-06 11:57:38

标签: javascript object

有人可以解释什么是自己的不可配置属性非严格模式

不知道它让我困惑的场景。据我所知,delete运算符从对象中删除了一个给定的属性。成功删除后,它将返回true,否则将返回false

在下面的例子中

var Employee = {
  age: 28,
  name: 'abc',
  designation: 'developer'
}

console.log(delete Employee.name)   // returns true
console.log(delete Employee.age)    // returns true
console.log(delete Employee.salary) // returns true

员工对象包含属性nameage。但不包含属性salary。如果在尝试删除未知属性工资时,所有这些都包括在内,我认为它返回false或未定义 但如果对象中不存在该属性但返回true,则它们也返回true。怎么样???我无法理解这种行为。

2 个答案:

答案 0 :(得分:1)

正如其他人所说,对于不可配置的属性,删除只会返回false。对于您在问题中提到的数据,此类属性的一个示例是Employee.name.length,delete将为false

可以创建不可配置的属性,如果您感兴趣,可以在此处阅读更多内容:

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty#Modifying_a_property

从上面的链接中,您可以看到如何设置可配置(或不可配置)的属性:

Object.defineProperty(o, 'b', {
  get: function() { return bValue; },
  set: function(newValue) { bValue = newValue; },
  enumerable: true,
  configurable: true
});

答案 1 :(得分:0)

这不是delete返回的内容。

  

对于所有情况都是true,除非属性是自己的不可配置属性,在这种情况下,false以非严格模式返回。

这就是它的工作方式。 不可配置的属性是关键词。

为了扩展epascarello所说的内容,MDN明确指出:

  

如果您要删除的媒体资源不存在,则删除不会产生任何影响并返回true

MDN也有一个whole bunch about strict mode

文档是你的朋友(至少在这种情况下)。