Javascript数组构造函数问题
Javascript Array constructor issue
我想知道为什么不建议使用数组声明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
- 让数组是创建一个新对象的结果,就像通过表达式
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并没有明确提到这样的东西。因此,您必须遵循其标准提到的变量声明规则。
相关文章:
- ES6构造函数返回基类的实例
- 使用Google Visualization动态调用构造函数
- 尝试将变量传递到对象中时的作用域问题'的方法构造函数
- 我的三角形区域构造函数有什么问题
- 是否存在替换Javascript构造函数的问题'原型,而不是添加到原型中
- CoffeeScript - 将参数传递给超级构造函数时出现问题
- 新手:Javascript构造函数和范围上下文问题
- Blob 构造函数 Safari 问题
- 什么'我的JavaScript对象构造函数有问题
- Javascript数组构造函数问题
- 使用构造函数上的循环为测验问题的答案生成复选框
- Javascript继承类构造函数问题
- 关于javascript原型和构造函数的一些问题
- 令人费解的Javascript构造函数问题
- 将this.constructor与构造函数调用一起使用以访问静态属性时是否存在兼容性问题
- 将JavaScript构造函数作为函数调用(没有新的?)是否存在问题
- 更改构造函数原型时出现问题
- JavaScript:关于构造函数**新**关键字的问题
- Javascript's函数构造函数-作用域问题
- Javascript构造函数和原型问题