Javascript数组构造函数问题

Javascript Array constructor issue

本文关键字:问题 构造函数 数组 Javascript      更新时间:2023-09-26

我想知道为什么不建议使用数组声明by:

 var arr = new Array() 

正如我所认为的,在重写Array的情况下,由[]声明应该受到保护,但。。。

Array = 1;
var arr = [] // boom  
TypeError: Cannot read property 'slice' of undefined

就我个人而言,我更喜欢使用var arr = [],但现在我不知道用CCD_ 4代替CCD_。

正如我所认为的,[]声明应该在覆盖Array的情况下受到保护,但。。。

它在EcmaScript 5下,但不在EcmaScript3下,所以它不会出现在旧的浏览器上。

规范的相关部分是http://es5.github.com/#x11.1.4

  1. 让数组是创建一个新对象的结果,就像通过表达式new Array()一样,其中Array标准内置构造函数,名称为

粗体文本已添加到EcmaScript 5中,但在EcmaScript 3中不存在。

这两种方法都是可互换的(关于功能),除了一种情况:

这些是不等价

var array = new Array(3);  // <-- Creates an array with length 3
var array = [3];
//If you wanted to use the `Array` to create an array with one element, use:
var array = new Array();
array[0] = 3;

[]不仅更短,而且是一致的。Array构造函数仅适用于创建具有初始长度的数组。

在SO.上已经有很多类似的帖子了

请参阅:

Javascript数组使用[]而不是新数组的最佳实践?

这个:

使用JavaScript新数组(n)声明

IMO,使用new Array()=[]并不重要。因为,当今大多数浏览器的Javascript引擎都足够聪明,可以利用实现上的微小差异。我经常使用=[],只是因为从javascript源代码中删除了一些额外的字节。

我运行了一个测试。若覆盖窗口,则会出现这种情况。数组中除了另一个函数之外的任何函数都不起作用。

[]这并不意味着什么——事实上Javascript并没有明确提到这样的东西。因此,您必须遵循其标准提到的变量声明规则。