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

在JavaScript中,有**种不同的方法来创建一个空对象。

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

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

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

var arrayA = []
var arrayB = new Array()
对该问题的评论 (4)
解决办法

对象

使用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. 始终使用[];--除非你需要快速创建一个"空" 数组的预定义长度。

评论(15)

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

许多作者建议不要使用对象构造函数,当你可以使用某种文字符号来代替时,你将确信你所创建的是你的代码中所期望的东西。

我建议你进一步阅读javascript上的文字符号和构造函数的区别,以找到更多的细节。

评论(1)

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

还有一件事:如果你忘记使用new操作符,你可能会出现微妙的错误。所以,使用字面意义会帮助你避免这个问题。

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

评论(0)

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

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

评论(1)
var objectA = {}

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

评论(3)

我相信{}在[这里][1]的一个Javascript视频中被推荐为一个好的编码约定。 new对于伪经典继承是必要的。 var obj = {};的方式有助于提醒你,这不是一个经典的面向对象的语言,而是一个原型语言。 因此,只有当你使用构造函数时,才会真正需要new。 例如:{{{5391064}。

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风格的对象读写。 [1]: http://developer.yahoo.com/yui/theater/

评论(0)

阵列实例化性能

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

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

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

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

关于基准,请点击以下内容。 https://jsfiddle.net/basickarl/ktbbry5b/

  • 但我不知道两者的内存占用量,我可以想象new Array()会占用更多的空间。
评论(1)

这在本质上是一样的。使用你认为更方便的任何东西。

评论(4)

OK,同样的事情,只是有2种不同的方法!一个叫 "对象文字",另一个是函数 "构造函数"。 一种叫 "对象文字",另一种是函数 "构造函数"!

但是读下去,有几件事我想分享一下。

使用"{}"让你的代码更易读,而创建 "Object "或其他内置函数的实例则不推荐......

另外,Object函数因为是函数,所以会获取参数,就像Object(params)一样......。 但{}是JavaScript中对象的纯启动方式......。

使用对象文字化使你的代码看起来更干净,更容易被其他开发者阅读,而且它符合JavaScript的最佳实践......。

虽然Javascript中的对象几乎可以是任何东西,但{}只指向javascript对象,为了测试它如何工作,请在你的javascript代码或控制台中做如下操作。

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

竟然是在创造一个数字!

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

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!

所以,如果你要创建一个对象,建议使用对象文字,这样可以有一个标准的代码,避免出现上述的代码事故,而且从性能上来说,使用{}的效果更好。

评论(6)