404

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

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

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

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

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

10 回答 10

494

对象

使用没有任何好处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. 始终使用[];- 除非您需要快速创建具有预定义长度的“空”数组。
于 2008-10-30T23:14:25.500 回答
101

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

于 2011-04-14T14:59:17.530 回答
13

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

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

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

于 2008-10-30T19:32:26.697 回答
8
var objectA = {}

更快,根据我的经验,更常用,所以最好采用“标准”并节省一些打字。

于 2008-10-30T19:45:35.530 回答
8

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

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

于 2008-10-30T20:08:00.493 回答
8

我相信在这里{}的一个Javascript 视频中被推荐为一个很好的编码约定。对于伪经典继承是必需的。这种方式有助于提醒您,这不是一种经典的面向对象语言,而是一种原型语言。因此,您真正需要的唯一时间是使用构造函数时。例如:newvar obj = {};new

var Mammal = function (name) {
  this.name = name;
};

Mammal.prototype.get_name = function () {
  return this.name;
}

Mammal.prototype.says = function() {
  return this.saying || '';
}

然后像这样使用它:

var aMammal = new Mammal('Me warm-blooded');
var name = aMammal.get_name();

{}使用as 相反的另一个优点new Object是您可以使用它来执行 JSON 样式的对象文字。

于 2008-10-30T20:55:53.050 回答
8

数组实例化性能

如果你想创建一个没有长度的数组:

var arr = [];var arr = new Array();

如果你想创建一个具有一定长度的空数组:

var arr = new Array(x);var arr = []; arr[x-1] = undefined;快

对于基准单击以下内容:https ://jsfiddle.net/basickarl/ktbbry5b/

但是我不知道两者的内存占用,我可以想象这new Array()会占用更多空间。

于 2016-08-06T01:20:24.373 回答
2

这本质上是一样的。使用任何你觉得更方便的东西。

于 2008-10-30T19:23:30.707 回答
2

好的,只有两种不同的方法可以做同样的事情!一个被调用object literal,另一个是函数constructor

但请继续阅读,有几件事我想分享:

使用{}使您的代码更具可读性,同时不推荐创建实例Object或其他内置函数...

此外,Object 函数获取参数,因为它是一个函数,就像Object(params)......但是{}是在 JavaScript 中启动一个对象的纯粹方式......

使用对象字面量使您的代码看起来更干净,更易于其他开发人员阅读,并且符合 JavaScript 中的最佳实践...

虽然 Javascript 中的对象几乎可以是任何东西,{}但只指向 javascript 对象,为了测试它是如何工作的,请在您的 javascript 代码或控制台中执行以下操作:

var n = new Object(1); //Number {[[PrimitiveValue]]: 1}

令人惊讶的是,它正在创建一个数字!

var a = new Object([1,2,3]); //[1, 2, 3]

这是创建一个数组!

var s = new Object('alireza'); //String {0: "a", 1: "l", 2: "i", 3: "r", 4: "e", 5: "z", 6: "a", length: 7, [[PrimitiveValue]]: "alireza"}

这个奇怪的结果String

所以如果你正在创建一个对象,建议使用对象字面量,有一个标准的代码,避免像上面那样的任何代码事故,{}根据我的经验,性能方面的使用更好!

于 2017-07-09T04:03:33.440 回答
2
Var Obj = {};

这是最常用和最简单的方法。

使用

var Obj = new Obj() 

不是首选。

没有必要使用new Object().

为了简单、可读性和执行速度,使用第一个(对象文字方法)。

于 2020-12-04T10:04:46.423 回答