对象表示法与大括号表示法

Object Notation vs. Curly Bracket Notation

以下 属性 设置和 JavaScript 中的对象声明在性能或功能上是否存在差异?

var a = {
  b: 'A property',
  c: 1
};

对比

var a = {};
a.b = 'A property';
a.c = 1;

而且,如果我要清除一个对象的所有属性,以下哪个更好,为什么?

var a = {};

对比

a.b = undefined;
a.c = undefined;

谢谢!

对于清除属性,最好执行 var a = {},因为这样您就不会假设设置了哪些属性。即使已将其他一些属性添加到 a.

,您也可以保证得到一个空对象

对于设置属性,没那么重要。如果对象属性设置一次后就不再更改,那么在一次操作中为对象分配所有属性会更清楚地表明您的意图。

声明: 我看不出功能上的区别。对于性能声明,我需要进行可能特定于引擎的测量。我希望没有什么区别,但这只是猜测,因此要衡量。

清算: 您在这里做了两件不同的事情:

  • a = {};a 的值替换为空对象,没有 属性(默认属性除外)
  • a.property = undefined; 将 属性 的值替换为 undefined,保留属性但将它们标记为未设置 一个适当的值。

这似乎是个人喜好问题,具体取决于 情况以及其他代码是否取决于现有属性。

对象声明/扩展它

  • 花括号表示法是对象文字声明。
  • 没有属性的简单大括号就像Object.create(null):一个原型为Object.
  • 的空对象

关于删除属性。

  • 将其他空对象(即{})设置为包含对象引用的变量只是重复使用相同的引用并使其指向新对象。

  • 将现有对象属性设置为 undefined 不等于 删除属性 。您只是将 undefined 设置为它们的值,因为在 JavaScript 中 undefined 是一个可能的值。

为了删除属性,您需要使用 delete 语句:

Object.keys(obj).forEach(function(propertyName) {
    // This really deletes the property from the object
    delete obj[propertyName];
});