在JavaScript中用{}或新的Object()创build一个空对象?

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

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

脚本引擎如何处理它们有什么不同? 有没有任何理由相互使用?

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

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

对象

使用new Object();是没有好处的new Object(); – 而{}; 可以使你的代码更紧凑,更可读。

为了定义空物体,他们在技术上是相同的。 {}语法更短,更整洁(更less的Java-ish),并允许您立即填充内联对象 – 就像这样:

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

数组

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

 var emptyArray = new Array(100); 

创build一个包含undefined所有槽的100个项目的长arrays – 这在某些情况下可能是好的/有用的(比如(new Array(9)).join('Na-Na ') + 'Batman!' )。

我的build议

  1. 切勿使用new Object(); – 比“{}”更笨,看起来很傻。
  2. 始终使用[]; – 除非需要快速创build具有预定义长度的“空”arrays。

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

 var objectA = {} //This is an object literal var objectB = new Object() //This is the object constructor 

在JS中,一切都是一个对象,但是你应该用新的Object()来注意下面的事情:它可以接收一个参数,根据这个参数,它将创build一个string,一个数字或者一个空对象。

例如: new Object(1) ,将返回一个Number。 new Object("hello")将返回一个string,这意味着对象构造函数可以委托 – 根据参数 – 创build对象的其他构造函数,如string,数字等…这是非常重要的时刻记住这一点你正在pipe理dynamic数据来创build对象..

许多作者build议不要使用对象构造函数,而是可以使用某种文字符号,而您将确定所创build的是您期望在代码中拥有的内容。

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

这些都有相同的最终结果,但我会简单地补充一点,使用文字语法可以帮助人们习惯于JSON的语法(JavaScript字面对象语法的string子集),所以最好进入。

另一件事:如果忘记使用new操作符,可能会有细微的错误。 所以,使用文字将帮助你避免这个问题。

最终,这将取决于形势和偏好。

 var objectA = {} 

根据我的经验,使用起来要快得多,所以最好采用“标准”并保存一些打字。

我相信{}被推荐在这里的Javascript vids之一作为一个良好的编码惯例。 伪古典inheritance需要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(); 

使用{}反对new Object另一个优点是可以使用它来执行JSON风格的对象文字。

数组实例化性能

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

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

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

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

对于基准点击以下: https : //jsfiddle.net/basickarl/ktbbry5b/

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

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

我的手指仍默认说新的Array(),但我是一个很老的人。 谢天谢地,Netscape 3并不是许多人今天必须考虑的浏览器。

这本质上是一回事。 使用任何你发现更方便的东西。

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

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

使用{}使您的代码更具可读性,同时创buildObject实例或其他内置函数不build议…

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

使用对象字面值,它使您的代码看起来更清晰,更易于阅读,并且与JavaScript中的最佳实践保持一致。

尽pipeJavascript中的对象几乎可以做任何事情,但只能指向JavaScript对象,为了testing它的工作原理,请在您的JavaScript代码或控制台中执行以下操作:

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

令人惊讶的是,它创造了一个数字!

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

这是创build一个数组!

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

和这个奇怪的结果为String

所以,如果你正在创build一个对象,build议使用对象字面值来获得一个标准的代码,并避免类似上面的任何代码事故,并且性能也是明智的。