在JavaScript中,有**种不同的方法来创建一个空对象。
var objectA = {}
var objectB = new Object()
脚本引擎处理它们的方式有什么不同吗?有什么理由使用其中一种而不是另一种吗?
同样的,也可以用不同的语法来创建一个空数组。
var arrayA = []
var arrayB = new Array()
使用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!'
)。
我的建议是
new Object();
--它比'{}'
而且看起来很傻。始终使用[];
--除非你需要快速创建一个"空"
数组的预定义长度。
是的,是有区别的,他们'不一样。 的确,你会得到相同的结果,但引擎对它们的工作方式不同。 其中一个是对象文字,另一个是构造函数,是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上的文字符号和构造函数的区别,以找到更多的细节。
var objectA = {}
更快,而且根据我的经验,更常用,所以最好采用'标准',以节省一些输入。
我相信{}
在[这里][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/
阵列实例化性能
如果你想创建一个没有长度的数组。
var arr = [];
比var arr = new Array();
快。
如果你想创建一个有一定长度的空数组。
var arr = new Array(x);
比var arr = []; arr[x-1] = undefined
;。
关于基准,请点击以下内容。
new Array()
会占用更多的空间。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
!
所以,如果你要创建一个对象,建议使用对象文字,这样可以有一个标准的代码,避免出现上述的代码事故,而且从性能上来说,使用{}
的效果更好。