使用{}或new Object()在JavaScript中创建一个空对象?
-
05-07-2019 - |
题
在JavaScript中有两种不同的方法来创建空对象:
var objectA = {}
var objectB = new Object()
脚本引擎如何处理它们有什么不同?有没有理由使用其中一个?
同样,也可以使用不同的语法创建一个空数组:
var arrayA = []
var arrayB = new Array()
解决方案
物件
使用 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')+'蝙蝠侠!'
)。
我的推荐
- 永远不要使用
new Object();
- 它比'{}'更笨拙,看起来很傻。 - 除非您需要快速创建“空”,否则请始终使用
[];
。具有预定义长度的数组。
醇>
其他提示
是的,有区别,它们不一样。确实,你会得到相同的结果,但引擎的工作方式不同。其中一个是对象文字,另一个是构造函数,两种不同的方式在javascript中创建对象。
var objectA = {} //This is an object literal
var objectB = new Object() //This is the object constructor
在JS中,一切都是一个对象,但你应该注意新的Object():它可以接收一个参数,并且根据该参数,它将创建一个字符串,一个数字,或者只是一个空对象
例如: new Object(1)
,将返回一个Number。 new Object(" hello")
将返回一个字符串,这意味着对象构造函数可以委托 - 依赖于参数 - 将对象创建给其他构造函数,如字符串,数字等...这是在管理动态数据以创建对象时要记住这一点非常重要。
许多作者建议您在使用某种文字符号时不要使用对象构造函数,在那里您将确保您创建的内容是您希望在代码中使用的内容。
我建议你进一步阅读关于javascript的文字符号和构造函数之间的差异,以找到更多细节。
这些具有相同的最终结果,但我只想补充一点,使用文字语法可以帮助人们习惯JSON(JavaScript字面对象语法的字符串ified子集)的语法,因此它可能是一个好习惯进入。
另一件事:如果您忘记使用 new
运算符,则可能会出现细微错误。因此,使用文字将帮助您避免这个问题。
最终,这取决于具体情况和偏好。
对象和数组文字语法{} / []是在JavaScript 1.2中引入的,因此在4.0之前的Netscape Navigator版本中不可用(并且会产生语法错误)。
我的手指仍默认说新的Array(),但我是一个非常老的人。值得庆幸的是,Netscape 3不是今天很多人都要考虑的浏览器......
var objectA = {}
更快,根据我的经验,更常用,所以最好采用'标准'并节省一些打字。
我相信在这里的一个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样式的对象文字。
数组实例化性能
如果你想创建一个没有长度的数组:
var arr = [];
比 var arr = new Array();
如果您希望创建一个具有一定长度的空数组:
var arr = new Array(x);
比 var arr = []更快; arr [x-1] =未定义
;
对于基准测试,请单击以下内容: https://jsfiddle.net/basickarl/ktbbry5b/
我不知道两者的内存占用,我可以想象 new Array()
会占用更多空间。
这基本上是一回事。使用你觉得比较方便的任何东西。
好的,只有两种不同的方法可以做同样的事情!一个叫 object literal
,另一个是函数构造函数
!
但请继续阅读,我想分享几件事:
使用 {}
使您的代码更具可读性,同时创建 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
!
因此,如果您正在创建一个对象,建议使用对象文字,以获得标准代码并避免上述任何代码意外,使用 {}
进行性能优化在我的经验中更好!