gpt4 book ai didi

javascript - 使用窗口['variableAsString']有什么问题吗?

转载 作者:太空宇宙 更新时间:2023-11-04 16:30:59 25 4
gpt4 key购买 nike

它对于编写需要迭代变量的函数非常有用,但我听到用户建议不要使用类似的方法。

这样写代码有什么问题吗?

使用示例:

假设我有三个数组,并且想要为这三个数组添加一个值:

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() 的更多信息.

然后,如果您使用的是流行的库,例如 underscorelodash ,您可以轻松地在对象和数组上做很多事情:

_.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没有它我们也可以实现你想要的(无论如何对于这个问题)。

关于javascript - 使用窗口['variableAsString']有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39822955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com