我正在尝试用自调用函数初始化一个数组,为简单起见,假设初始值为 0 到 4 之间的数字的平方。new
关键字创建新对象,因此可以在 new
关键字之后使用 IIFE 体内的 this.x
或 this[x]
访问新创建对象的字段。代码是:
var arr = new (function() {
for (var i=0; i<5; i++) { this[i]=i*i; }
})();
现在,你可以像arr[4]
一样访问变量arr
对应的字段,得到16
。如果您只像处理对象一样处理 arr
,那完全没问题,但是一旦您尝试将其视为数组,就会遇到问题。也就是说,您不能将 reduce
之类的函数应用于它:
< arr.reduce(...);
> TypeError: arr.reduce is not a function
那是因为 arr
实际上是一个对象,而不是数组:
< arr;
> ({0:0, 1:1, 2:4, 3:9, 4:16})
所以这是我的问题:如何在这个方法中避免这种行为?如何让 JavaScript 将这个新创建的对象解释为一个数组?
最佳答案
没有 IEFE,它更短更清晰:
var arr = [];
for (var i=0; i<5; i++) arr[i] = i*i;
如果没有额外的计数器变量 i
,您可以:
for (var arr=[]; arr.length<5; ) arr[arr.length] = Math.pow(arr.length, 2);
关于javascript - 具有自调用函数的数组初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12553923/