5

可能重复:
在 JavaScript 中使用 {} 或 new Object() 创建一个空对象?

当我想声明一个新数组时,我使用这个符号

var arr = new Array();

但是当在线测试时,例如在 jsbin 上,一个警告信号告诉我“使用数组文字符号 []”。

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

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

4

5 回答 5

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​​​​​​​​

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

于 2012-07-30T06:20:13.637 回答
5

大多数情况下,人们使用var a = []是因为Douglas Crockford这么说的。

他的原因包括 new 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 构造函数并让它做一些奇怪的事情,但你不能覆盖 [ ] 的行为。

就个人而言,我总是使用 [ ] 语法,同样总是使用 { } 语法来代替 new Object()。

于 2012-07-30T06:23:37.553 回答
0

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

var a = [];代替var o = new Array();

var o = {};代替var o = new Object();

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

于 2012-07-30T06:27:13.410 回答
0

JavaScript 是一种原型语言,而不是像 C# 这样的经典语言。尽管 JavaScript 确实有一个看起来很像 C# 的 new 运算符,但您不应该使用它来创建新对象或数组。

//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 = [];

使用这种模式,你实际上有很多使用对象文字和数组初始化语法的表达能力。

//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 关键字。他们所做的只是增加额外的膨胀并减慢速度。

使用 new 关键字的唯一真正原因是,如果您正在创建一个新对象并且希望它使用您定义的构造函数。有关此主题的更多信息,您可以查看 Douglas Crockford 题为 JavaScript, We Hardly new Ya的文章。

于 2012-07-30T06:34:43.053 回答
0

推荐的做法是使用

var arr = [];

已经在这里回答了

于 2012-07-30T06:20:12.767 回答