2012-07-30 72 views
5

可能重复:
Create an empty object in JavaScript with {} or new Object()?在Javascript中声明一个数组时,最好的做法是哪一个?

当我要声明一个新的阵列我用这个符号

var arr = new Array(); 

但是网络进行测试时,例如在jsbin,一警告信号我要“使用数组文字符号[]”。

我没有找到避免使用构造函数的理由。在某种程度上比使用[]效率低?或者这是不好的做法?

是否有充分的理由使用var arr = [];而不是var arr = new Array();

回答

5

大多数人使用var a = [],因为Douglas Crockford这样说。

他的理由包括新的Array()的非直观的,不一致的行为:

var a = new Array(5);  // an array pre-sized to 5 elements long 
var b = new Array(5, 10); // an array with two elements in it 

注意,没有办法与new Array()在它创建只是一个预先指定数量的元素的数组!

使用[]实际上更高效,也更安全!可以覆盖Array构造函数并使其做一些奇怪的事情,但不能覆盖[]的行为。个人而言,我总是使用[]语法,并且类似地总是使用{}语法代替新的Object()。

+0

你的意思是什么?没有办法创建一个数组,只有一个预先指定的数字元素*? – KooiInc 2012-07-30 06:48:57

+1

他意味着你不能使用新的数组(123)创建一个数组[123],因为它创建了给定大小的预定义数组。 – 2012-07-30 07:03:05

0

建议的做法是使用

var arr = []; 

已经回答here

+2

该男子问为什么更好的解释。 – 2012-07-30 06:23:43

7

[]是:

  • 更清晰
  • 不受new Array(3)new Array(3,3)做完全不同的事情
  • 不能被覆盖。

示例代码:

var a = new Array(3); 
var b = new Array(3,3); 
Array = function() { return { length: "!" }; }; 
var c = new Array(); 
var d = []; 
alert(a.length); // 3 
alert(b.length); // 2 
alert(c.length); // ! 
alert(d.length);​ // (still) 0​​​​​​​​ 

此代码live - 将尝试创建4个警报!

+0

很好的答案。顺便说一句,我是相当于知道为什么你认为新的阵列(3)和新的阵列(3,3)相冲突?他们执行完全不同的初始化。 – 2012-07-30 06:23:29

+0

'[]'在许多浏览器上也是[更快](http://jsperf.com/literal-vs-constructor-array/4)。 – 2012-07-30 06:23:48

+0

@AshwinPrabhu - 他们做了完全不同的初始化是我的观点。它要求维护人员知道添加第二个参数会改变第一个参数的含义。 – Quentin 2012-07-30 06:26:08

0

在JavaScript中,您应该尽可能使用文字。

var a = [];而不是var o = new Array();

var o = {};而不是var o = new Object();

同样,不做new String("abc");new Number(1);,等等。

0

JavaScript是一种原型语言,而不是像C#这样的经典语言。尽管JavaScript确实有一个与C#非常类似的新操作符,但您不应该将它用于创建新对象或数组。

//Bad way to declare objects and arrays 
var person = new Object(), 
    keys = new Array(); 

新的关键字加入到语言部分安抚古典语言,但在现实中,它往往会混淆开发商多帮助他们。相反,JavaScript中有本地方式来声明对象和数组,您应该使用它们。

而不是使用以前的语法,而应该使用它们的文字表示法来声明对象和数组。

//Preferred way to declare objects and arrays 
var person = {}, 
    keys = []; 

使用这种模式,你实际上有很多使用Object Literals和数组初始值设定语法的表达力。

//Preferred way to declare complex objects and arrays 
var person = { 
     firstName: "Elijah", 
     lastName: "Manor", 
     sayFullName: function() { 
      console.log(this.firstName + " " + 
       this.lastName); 
     } 
    }, 
    keys = ["123", "676", "242", "4e3"]; 

最佳实践

你应该使用自己的文字符号,而不是使用新的操作声明所有的变量。以类似的方式,您不应该使用新的关键字布尔,数字,字符串或函数。他们所做的只是增加额外的膨胀并放慢速度。

为什么要使用new关键字的唯一真正原因是如果你正在创建一个新的对象,并且你希望它使用你定义的构造函数。有关此主题的更多信息,可以查看道格拉斯克罗克福德的文章JavaScript,We Hardly new Ya

相关问题