JavaScript中如何使用for循环给多个变量分别赋不同值
问题原因
JavaScript里原始类型(undefined、字符串、数字、布尔值等)的赋值是值传递,不存在引用绑定。
你初始化varArray时,数组里存的只是varOne、varTwo、varThree三个变量当时的值——也就是三个undefined,数组元素和原本的三个独立变量从这一步开始就没有任何关联了。后续循环给varArray[i]赋值,只会修改数组自身的元素内容,完全影响不到最初声明的三个独立变量,自然达不到预期效果。
可行解决方案
方案1:解构赋值(最简洁,日常开发优先用)
不需要写循环,一行代码就能完成按位置对应赋值:
let varOne, varTwo, varThree; const valueArray = ['value-one', 'value-two', 'value-three']; // 按数组顺序对应给变量赋值 [varOne, varTwo, varThree] = valueArray; // 验证结果 console.log(varOne) // 输出: value-one console.log(varTwo) // 输出: value-two console.log(varThree) // 输出: value-three
方案2:必须用循环的实现方式
如果有批量循环赋值的需求,不要把原始类型的变量直接存进数组,借助对象的属性引用实现即可:
// 把需要赋值的变量作为对象属性存储,对象属性的修改是引用生效的 const varStore = { varOne: undefined, varTwo: undefined, varThree: undefined }; const valueArray = ['value-one', 'value-two', 'value-three']; const varKeyList = Object.keys(varStore); for (let i = 0; i < varKeyList.length; i++) { varStore[varKeyList[i]] = valueArray[i]; } // 后续通过varStore.varOne、varStore.varTwo的形式取值即可 console.log(varStore.varOne) // 输出: value-one
提示:不要为了给局部变量动态赋值使用
eval类的黑科技写法,这类写法可维护性极差,还会带来注入安全风险。
内容的提问来源于stack exchange,提问作者Marvellous ajayi
相关产品推荐
相关产品推荐

