它对于编写需要迭代变量的函数非常有用,但我听到用户建议不要使用类似的方法。
这样写代码有什么问题吗?
使用示例:
假设我有三个数组,并且想要为这三个数组添加一个值:
array1=[];
array2=[1,2];
array3=[4,4];
for (var i=1;i< 4; i++){
window['array'+i].push(1);
}
如果您需要迭代一组变量,请提前计划并将它们放入一个对象中:
var myArrays = {
array1: [],
array2: [1, 2],
array3: [4, 4],
"any-name-you-want-works": []
};
访问它们仍然很简单:
myArrays.array1.push(1);
myArrays["any-name-you-want-works"].push(1);
向 myArrays
添加新数组:
myArrays.array4 = [3, 5];
迭代变得容易(这是 the recommended way ):
for (var arr in myArrays) {
if (object.hasOwnProperty(arr)) {
arr.push(1);
}
}
如果您不需要支持旧版浏览器,也可以使用较新的功能 ( source ):
Object.keys(myArrays).forEach(function(key, index) {
myArrays[key].push(1);
});
有关 Object.keys()
的更多信息.
然后,如果您使用的是流行的库,例如 underscore或lodash ,您可以轻松地在对象和数组上做很多事情:
_.chain(myArrays)
.each(function(arr) { arr.push(1) }) // adds one to each array
.first() // takes the first array
.map(function(val) { return val *2; }) // and multiply each value
.reverse() // then reverse those values
.value(); // and get the array
<小时/>
正如我在评论中提到的,您不应该污染全局窗口对象,也不应该迭代它来避免碰撞或意外行为。
将代码包装在 IIFE 中由于多种原因,(立即调用函数表达式)始终是一个好主意,而不是使用全局范围,但这是一个 whole other discussion没有它我们也可以实现你想要的(无论如何对于这个问题)。
我是一名优秀的程序员,十分优秀!