在JavaScript中用{}或新的Object()创build一个空对象?
有两种不同的方法可以在JavaScript中创build一个空对象:
var objectA = {} var objectB = new Object()
脚本引擎如何处理它们有什么不同? 有没有任何理由相互使用?
同样,也可以使用不同的语法创build一个空数组:
var arrayA = [] var arrayB = new Array()
对象
使用new Object();
是没有好处的new Object();
– 而{};
可以使你的代码更紧凑,更可读。
为了定义空物体,他们在技术上是相同的。 {}
语法更短,更整洁(更less的Java-ish),并允许您立即填充内联对象 – 就像这样:
var myObject = { title: 'Frog', url: '/img/picture.jpg', width: 300, height: 200 };
数组
对于数组,使用new Array();
方法几乎没有任何好处new Array();
over [];
– 有一个小例外:
var emptyArray = new Array(100);
创build一个包含undefined
所有槽的100个项目的长arrays – 这在某些情况下可能是好的/有用的(比如(new Array(9)).join('Na-Na ') + 'Batman!'
)。
我的build议
- 切勿使用
new Object();
– 比“{}”更笨,看起来很傻。 - 始终使用
[];
– 除非需要快速创build具有预定义长度的“空”arrays。
是的,有区别,他们不一样。 确实,你会得到相同的结果,但引擎以不同的方式工作。 其中一个是对象字面值,另一个是构造函数,在javascript中创build对象的两种不同方式。
var objectA = {} //This is an object literal var objectB = new Object() //This is the object constructor
在JS中,一切都是一个对象,但是你应该用新的Object()来注意下面的事情:它可以接收一个参数,根据这个参数,它将创build一个string,一个数字或者一个空对象。
例如: new Object(1)
,将返回一个Number。 new Object("hello")
将返回一个string,这意味着对象构造函数可以委托 – 根据参数 – 创build对象的其他构造函数,如string,数字等…这是非常重要的时刻记住这一点你正在pipe理dynamic数据来创build对象..
许多作者build议不要使用对象构造函数,而是可以使用某种文字符号,而您将确定所创build的是您期望在代码中拥有的内容。
我build议你进一步阅读关于javascript的文字符号和构造函数之间的差异,以find更多的细节。
这些都有相同的最终结果,但我会简单地补充一点,使用文字语法可以帮助人们习惯于JSON的语法(JavaScript字面对象语法的string子集),所以最好进入。
另一件事:如果忘记使用new
操作符,可能会有细微的错误。 所以,使用文字将帮助你避免这个问题。
最终,这将取决于形势和偏好。
var objectA = {}
根据我的经验,使用起来要快得多,所以最好采用“标准”并保存一些打字。
我相信{}
被推荐在这里的Javascript vids之一作为一个良好的编码惯例。 伪古典inheritance需要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风格的对象文字。
数组实例化性能
如果你想创build一个没有长度的数组:
var arr = [];
比var arr = new Array();
更快var arr = new Array();
如果你想创build一个具有一定长度的空数组:
var arr = new Array(x);
比var arr = []; arr[x-1] = undefined
更快var arr = []; arr[x-1] = undefined
var arr = []; arr[x-1] = undefined
;
对于基准点击以下: https : //jsfiddle.net/basickarl/ktbbry5b/
我不知道两者的内存占用情况,我可以想象, new Array()
占用更多的空间。
对象和数组字面值语法{} / []是在JavaScript 1.2中引入的,因此在4.0之前的Netscape Navigator版本中不可用(并且会产生语法错误)。
我的手指仍默认说新的Array(),但我是一个很老的人。 谢天谢地,Netscape 3并不是许多人今天必须考虑的浏览器。
这本质上是一回事。 使用任何你发现更方便的东西。
好的 ,只有两种不同的方法可以做同样的事情! 一个叫做object literal
,另一个叫做函数constructor
!
但请继续阅读,我想分享几件事情:
使用{}
使您的代码更具可读性,同时创buildObject
实例或其他内置函数不build议…
此外,对象函数获取参数,因为它是一个函数,如Object(params)
…但{}
是纯粹的方式来启动一个对象在JavaScript中…
使用对象字面值,它使您的代码看起来更清晰,更易于阅读,并且与JavaScript中的最佳实践保持一致。
尽pipeJavascript中的对象几乎可以做任何事情,但只能指向JavaScript对象,为了testing它的工作原理,请在您的JavaScript代码或控制台中执行以下操作:
var n = new Object(1); //Number {[[PrimitiveValue]]: 1}
令人惊讶的是,它创造了一个数字!
var a = new Object([1,2,3]); //[1, 2, 3]
这是创build一个数组!
vars = new Object('alireza'); //String {0: "a", 1: "l", 2: "i", 3: "r", 4: "e", 5: "z", 6: "a", length: 7, [[PrimitiveValue]]: "alireza"}
和这个奇怪的结果为String
!
所以,如果你正在创build一个对象,build议使用对象字面值来获得一个标准的代码,并避免类似上面的任何代码事故,并且性能也是明智的。