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

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

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

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

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

当前回答

数组实例化性能

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

Var arr = [];比var arr = new Array()快;

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

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

有关基准测试,请单击以下内容:https://jsfiddle.net/basickarl/ktbbry5b/

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

其他回答

好吧,只有两种不同的方法来做同样的事情!一个叫对象字面值,另一个是函数构造函数!

但继续读下去,我有几件事想和大家分享:

使用{}使您的代码更具可读性,而创建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]

这是创建Array!

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的奇怪结果!

所以如果你正在创建一个对象,建议使用object literal,有一个标准的代码,避免任何类似上述的代码事故,而且在性能上使用{}在我的经验是更好的!

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

我的手指仍然默认为new Array(),但我已经很老了。值得庆幸的是,网景3不是今天许多人不得不考虑的浏览器……

数组实例化性能

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

Var arr = [];比var arr = new Array()快;

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

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

有关基准测试,请单击以下内容:https://jsfiddle.net/basickarl/ktbbry5b/

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

对象

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

对于定义空对象,它们在技术上是相同的。{}语法更短,更整洁(不像java那样),并且允许你立即内联填充对象,就像这样:

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

数组

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

var emptyArray = new Array(100);

创建一个包含100项的长数组,所有槽位都包含undefined——这在某些情况下可能很好/有用(例如(new array(9))。join(‘Na-Na’)+‘蝙蝠侠!’)。

我的建议

不要使用new Object();-它比{}更笨重;看起来很傻。 始终使用[];-除非你需要快速创建一个预定义长度的“空”数组。

Var Obj = {};

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

使用

var Obj = new Obj() 

不是首选。

不需要使用new Object()。

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