什么是删除对象成员的最佳方法,而不是留下未定义的

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似乎没有做到这一点

谢谢,

肖恩.

T.J*_*der 6

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 42
Run 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)