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

IT技术 javascript arrays object javascript-objects new-operator
2021-01-23 19:54:21

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

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

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

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

var arrayA = []
var arrayB = new Array()
6个回答

对象

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

对于定义空对象,它们在技术上是相同的。{}语法是短,整齐(不以Java-ISH),并让你瞬间填充对象内联-就像这样:

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

数组

对于数组,使用new Array();over几乎没有任何好处[];——只有一个小例外:

var emptyArray = new Array(100);

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

我的推荐

  1. 永远不要使用new Object();- 它比它笨重{};而且看起来很傻。
  2. 始终使用[];- 除非您需要快速创建具有预定义长度的“空”数组。
@Pablo 我不知道你的论点是什么。像 Douglas Crockford 一样,我建议使用[]. 那里没有争论。但是,您认为这new Array(100)在某种程度上是“无效的”,这是不正确的。
2021-03-17 19:54:21
我想补充一点,这Object.create(null)对于创建空白对象很有用,而{ }从对象原型继承。
2021-03-17 19:54:21
@Pablo 没有什么无效的new Array(100)阅读文献:developer.mozilla.org/en/JavaScript/Reference/Global_Objects/...
2021-04-06 19:54:21
即使您使用 Array(100) 语法,在第 101 个位置的同一个数组中也未定义;number 真正做的唯一一件事就是改变 length 属性的值。
2021-04-11 19:54:21
此外,要知道new Array(1,2,3)结果[1,2,3],但new Array(1)不会导致[1]; 因此, 的语义Array不一致且不必要地混淆。
2021-04-13 19:54:21

是的,有区别,它们不一样。确实,您会得到相同的结果,但引擎对它们的工作方式不同。其中一个是对象字面量,另一个是构造函数,这是在 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 上的文字符号和构造函数之间的差异,以找到更多详细信息。

实际上,文字符号对于创建动态数据对象更具可读性和简洁性。
2021-03-15 19:54:21

它们具有相同的最终结果,但我只想补充一点,使用文字语法可以帮助人们习惯 JSON 的语法(JavaScript 文字对象语法的字符串化子集),因此进入.

另一件事:如果您忘记使用new运算符,您可能会出现细微的错误因此,使用文字将帮助您避免该问题。

最终,这将取决于情况和偏好。

对象和数组字面量语法 {}/[] 是在 JavaScript 1.2 中引入的,因此在 4.0 之前的 Netscape Navigator 版本中不可用(并且会产生语法错误)。

我的手指仍然默认说 new Array(),但我是一个非常老的人。值得庆幸的是,Netscape 3 并不是当今许多人不得不考虑的浏览器……

网景3?天哪,那是上个世纪了:-D
2021-03-14 19:54:21
我不得不在这个答案上吹灰尘才能看到它,因为它太旧了!
2021-04-13 19:54:21
var objectA = {}

速度更快,并且根据我的经验,更常用,因此最好采用“标准”并节省一些输入。

跑得更快还是打字更快?
2021-03-17 19:54:21
此外,文字通常在解析时创建,而new Object必须在运行时执行。
2021-04-06 19:54:21
好吧,诚然,我的意思是“打字”,但是,考虑到额外的解析时间,在执行方面也可能稍微快一点:-)
2021-04-11 19:54:21