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

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

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

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

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

var arrayA = []
var arrayB = new Array()
680798 次浏览

这本质上是一样的。你觉得什么方便就用什么。

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

还有一件事:如果你忘记使用new操作符,你可能会有细微的错误。因此,使用字面量将帮助您避免这个问题。

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

var objectA = {}

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

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

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

我相信{}在这里的一个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风格的对象字面量。

对象

使用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 ') + 'Batman!')。

我的建议

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

是的,有区别,它们不一样。的确,你会得到相同的结果,但引擎的工作方式是不同的。一个是对象字面值,另一个是构造函数,这是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")将返回一个字符串,这意味着对象构造函数可以根据参数将对象创建委托给其他构造函数,如string、number等…当你管理动态数据来创建对象时,记住这一点是非常重要的。

许多作者建议,当您可以使用某种文字符号来代替时,不要使用对象构造函数,在这种情况下,您将确保您所创建的是您期望在代码中拥有的东西。

我建议你进一步阅读javascript中文字符号和构造函数之间的区别,以获得更多细节。

数组实例化性能

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

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

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

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

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

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

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

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

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

因此,如果你正在创建一个对象,建议使用对象字面量,有一个标准的代码,避免任何类似上述的代码事故,并且在性能上使用{}在我的经验中更好!

Var Obj = {};

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

使用

var Obj = new Obj()

不是首选。

没有必要使用new Object()

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