在JavaScript中有两种不同的方法来创建空对象:
var objectA = {}
var objectB = new Object()
脚本引擎如何处理它们有什么不同?有没有理由使用其中一个?
同样,也可以使用不同的语法创建一个空数组:
var arrayA = []
var arrayB = new Array()
答案 0 :(得分:431)
使用new Object();
没有任何好处 - 而{};
可以使您的代码更紧凑,更易读。
为了定义空对象,它们在技术上是相同的。 {}
语法更短,更整洁(更少Java-ish),并允许您立即填充内联对象 - 如下所示:
var myObject = {
title: 'Frog',
url: '/img/picture.jpg',
width: 300,
height: 200
};
对于数组,使用new Array();
而不是[];
几乎没有任何好处 - 只有一个小例外:
var emptyArray = new Array(100);
创建一个包含undefined
的所有插槽的100项长数组 - 在某些情况下(例如(new Array(9)).join('Na-Na ') + 'Batman!'
)可能很好/很有用。
new Object();
- 它比“{}”更笨拙,看起来很傻。[];
- 除非您需要快速创建具有预定义长度的“空”数组。答案 1 :(得分:85)
是的,有区别,它们不一样。确实,你会得到相同的结果,但引擎的工作方式不同。其中一个是对象文字,另一个是构造函数,两种不同的方式在javascript中创建对象。
var objectA = {} //This is an object literal
var objectB = new Object() //This is the object constructor
在JS中,一切都是一个对象,但你应该注意新的Object():它可以接收一个参数,并且根据该参数,它将创建一个字符串,一个数字,或者只是一个空对象
例如:new Object(1)
,将返回一个数字。 new Object("hello")
将返回一个字符串,这意味着对象构造函数可以委托 - 依赖于参数 - 将对象创建委托给其他构造函数,如字符串,数字等......当你'时,请记住这一点非常重要。重新管理动态数据以创建对象..
许多作者建议您不要使用对象构造函数,而不是使用某种文字符号,在那里您将确保您创建的内容是您希望在代码中使用的内容。
我建议你进一步阅读关于javascript的文字符号和构造函数之间的差异,以找到更多细节。
答案 2 :(得分:11)
这些具有相同的最终结果,但我只想补充一点,使用文字语法可以帮助人们习惯JSON(JavaScript字面对象语法的字符串ified子集)的语法,因此它可能是一个好习惯进入。
另一件事:如果您忘记使用new
运算符,可能会出现细微错误。因此,使用文字将帮助您避免这个问题。
最终,这取决于具体情况和偏好。
答案 3 :(得分:7)
var objectA = {}
更快,根据我的经验,更常用,所以最好采用'标准'并节省一些打字。
答案 4 :(得分:7)
对象和数组文字语法{} / []是在JavaScript 1.2中引入的,因此在4.0之前的Netscape Navigator版本中不可用(并且会产生语法错误)。
我的手指仍默认说新的Array(),但我是一个非常老的人。值得庆幸的是,Netscape 3不是今天很多人都要考虑的浏览器......
答案 5 :(得分:7)
我认为在here上的一个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样式的对象文字。
答案 6 :(得分:7)
如果你想创建一个没有长度的数组:
var arr = [];
比var arr = new Array();
如果您希望创建一个具有一定长度的空数组:
var arr = new Array(x);
比var arr = []; arr[x-1] = undefined
;
对于基准测试,请点击以下内容:https://jsfiddle.net/basickarl/ktbbry5b/
我不知道两者的内存占用,我可以想象new Array()
占用更多空间。
答案 7 :(得分:2)
这基本上是一回事。使用你觉得比较方便的任何东西。
答案 8 :(得分:1)
好的,只有两种不同的方法可以做同样的事情!一个叫object literal
,另一个是函数constructor
!
但请继续阅读,我想分享一些事情:
使用{}
可以使您的代码更具可读性,同时创建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]
这就是创建一个阵列!
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
!
因此,如果您正在创建一个对象,建议使用对象文字,使用标准代码并避免上述任何代码意外,使用{}
进行性能优化在我的经验中更好!
答案 9 :(得分:0)
Var Obj = {}; 这是最常用和最简单的方法。
不推荐使用var Obj = new Obj()。
不需要使用new Object()。 为了简化,提高可读性和提高执行速度,请使用第一个(对象文字方法)。