使用 {} 或 new Object() 在 JavaScript 中创建一个空对象?

在 JavaScript 中创建空对象有两种不同的方法:

var objectA = {}
var objectB = new Object()

脚本引擎处理它们的方式有什么区别吗?有什么理由使用一个而不是另一个?

同样,也可以使用不同的语法创建一个空数组:

var arrayA = []
var arrayB = new Array()

答案 1

对象

使用没有任何好处 - 虽然可以使您的代码更紧凑,更具可读性。new Object();{};

对于定义空对象,它们在技术上是相同的。语法更短,更整洁(更少Java风格),并允许您立即以内联方式填充对象 - 如下所示:{}

var myObject = {
        title:  'Frog',
        url:    '/img/picture.jpg',
        width:  300,
        height: 200
      };

阵 列

对于数组,使用over同样几乎没有任何好处 - 除了一个小的例外:new Array();[];

var emptyArray = new Array(100);

创建一个 100 个项目长的数组,其中所有插槽都包含 - 这在某些情况下可能很好/很有用(例如 )。undefined(new Array(9)).join('Na-Na ') + 'Batman!'

我的建议

  1. 永远不要使用 - 它比它更笨拙,看起来很傻。new Object();{};
  2. 始终使用 - 除非您需要快速创建具有预定义长度的“空”数组。[];

答案 2

是的,有区别,它们不一样。确实,您将获得相同的结果,但是引擎以不同的方式为它们工作。其中一个是对象文字,另一个是构造函数,这是在javascript中创建对象的两种不同方式。

var objectA = {} //This is an object literal

var objectB = new Object() //This is the object constructor

在JS中,一切都是一个对象,但是你应该知道new Object()的以下事情:它可以接收一个参数,并且根据该参数,它将创建一个字符串,一个数字,或者只是一个空对象。

例如:,将返回一个数字。 将返回一个字符串,这意味着对象构造函数可以委托 - 根据参数 - 对象创建给其他构造函数,如字符串,数字等...在管理动态数据以创建对象时,牢记这一点非常重要。new Object(1)new Object("hello")

许多作者建议不要使用对象构造函数,因为你可以改用某种文字表示法,这样你就可以确保你正在创建的内容是你期望在代码中拥有的东西。

我建议你进一步阅读javascript上文字符号和构造函数之间的差异,以找到更多细节。