有人可以解释什么是自己的不可配置属性和非严格模式?
不知道它让我困惑的场景。据我所知,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
员工对象包含属性name
和age
。但不包含属性salary
。如果在尝试删除未知属性工资时,所有这些都包括在内,我认为它返回false
或未定义
但如果对象中不存在该属性但返回true
,则它们也返回true
。怎么样???我无法理解这种行为。
答案 0 :(得分:1)
正如其他人所说,对于不可配置的属性,删除只会返回false
。对于您在问题中提到的数据,此类属性的一个示例是Employee.name.length,delete
将为false
。
可以创建不可配置的属性,如果您感兴趣,可以在此处阅读更多内容:
从上面的链接中,您可以看到如何设置可配置(或不可配置)的属性:
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。
文档是你的朋友(至少在这种情况下)。