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

时间:2008-10-30 19:22:45

标签: javascript arrays object javascript-objects new-operator

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

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

脚本引擎如何处理它们有什么不同?有没有理由使用其中一个?

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

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

10 个答案:

答案 0 :(得分:431)

物件

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

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

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

阵列

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

var emptyArray = new Array(100);

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

我的推荐

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

答案 1 :(得分:85)

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

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

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

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

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

许多作者建议您不要使用对象构造函数,而不是使用某种文字符号,在那里您将确保您创建的内容是您希望在代码中使用的内容。

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

答案 2 :(得分:11)

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

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

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

答案 3 :(得分:7)

var objectA = {}

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

答案 4 :(得分:7)

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

我的手指仍默认说新的Array(),但我是一个非常老的人。值得庆幸的是,Netscape 3不是今天很多人都要考虑的浏览器......

答案 5 :(得分:7)

我认为在here上的一个Javascript视频中推荐使用{}作为良好的编码约定。 new是伪经典继承所必需的。 var 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();

使用{}作为new Object的反对意见的另一个好处是,您可以使用它来执行JSON样式的对象文字。

答案 6 :(得分:7)

数组实例化性能

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

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

如果您希望创建一个具有一定长度的空数组:

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

更快

对于基准测试,请点击以下内容:https://jsfiddle.net/basickarl/ktbbry5b/

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

答案 7 :(得分:2)

这基本上是一回事。使用你觉得比较方便的任何东西。

答案 8 :(得分:1)

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

但请继续阅读,我想分享一些事情:

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

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

使用object literal可让您的代码看起来更清晰,更易于阅读其他开发人员,并且它与JavaScript中的最佳实践一致...

虽然Javascript中的Object几乎可以是任何东西,{}只指向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

因此,如果您正在创建一个对象,建议使用对象文字,使用标准代码并避免上述任何代码意外,使用{}进行性能优化在我的经验中更好!

答案 9 :(得分:0)

Var Obj = {}; 这是最常用和最简单的方法。

不推荐使用var Obj = new Obj()。

不需要使用new Object()。 为了简化,提高可读性和提高执行速度,请使用第一个(对象文字方法)。