在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议
-  切勿使用new Object();– 比“{}”更笨,看起来很傻。
-  始终使用[];– 除非需要快速创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需要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风格的对象文字。 
数组实例化性能
如果你想创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议使用对象字面值来获得一个标准的代码,并避免类似上面的任何代码事故,并且性能也是明智的。