bor*_*net 1 javascript ecmascript-6 lodash
删除对象成员的最佳方法是什么,而不是留下未定义的遗留物
var o = {
a: 1,
b: 2,
c: 3
};
delete o['a']
Run Code Online (Sandbox Code Playgroud)
对于for循环o会给我们一个未定义的成员.我已经运行了lodash,但_.unset似乎没有做到这一点
谢谢,
肖恩.
delete就是这样.正如阿德内诺所说,delete不会遗漏任何东西.一旦你delete o.a,o没有a财产所有.1你看到的唯一原因就是你undefined是否要求获得该属性,因为在对象上询问不存在的属性的值会让你回归undefined.
对于for循环o会给我们一个未定义的元素
没有任何基于o实际属性的循环.例如,不是这个:
var o = {
a: 1,
b: 2,
c: 3
}
delete o.a; // delete o['a']; also works
for (var name in o) {
console.log(name + ": " + o[name]);
}Run Code Online (Sandbox Code Playgroud)
1实际上,可以创建一个无法删除的属性(通过使属性不可配置),但可以删除普通属性.以下是创建不可配置属性的方法:
var o = {};
Object.defineProperty(o, "a", {
value: 42,
writable: true,
enumerable: true
});
console.log(o.a); // 42
delete o.a;
console.log(o.a); // still 42Run Code Online (Sandbox Code Playgroud)
通过不包括configurable: true,我们使该属性不可配置.
如果使用严格模式,则尝试删除不可配置的属性是错误:
"use strict";
var o = {};
Object.defineProperty(o, "a", {
value: 42,
writable: true,
enumerable: true
});
console.log(o.a); // 42
delete o.a; // throws error
console.log(o.a);Run Code Online (Sandbox Code Playgroud)