js如何循环赋值?

  var a0={name:0},
      a1={name:1},
      a2={name:2},
      a3={name:3},
      a4={name:4},
      a5={name:5},
      a6={name:6}
    ......

像这样的赋值我想循环赋值,如何实现?
我试过用eval(),可是这样对象就变成字符串了啊

for(var j=0;j<json.length;j++) {
   eval('a'+j+ '="'+ json[j]+'"');
   console.log(eval('a'+j));//变成[object Object]
}
阅读 8.7k
7 个回答

因为=左边不能有运算符,所以动态的拼接变量名应该是不行的,但是可以换种思路实现:

var oa = [];

for (var i=0; i<100; i++) {
    oa.push({name: i});
}

这样是可以的

for (let i = 0; i < json.length; i++) {
    eval('a' + i + '=' + JSON.stringify(json[i]));
}

json[i] 默认转成字符串是 [object Object],如果你不加引号代码就变成了 a0=[object Object],运行是会报错的,我猜想你为了不报错给 json[i] 又加了引号,代码变成了 a0="[object Object]",所以值就变成字符串了。

一般不建议使用 eval(),因为会产生独立作用域而影响性能,同时还有被代码注入的危险。而且这样 eval 出来的变量因为数量不定而不便于访问和管理,建议还是存放在 json 这个数据中就好了。如果想通过 key 的方式来访问数据而不是数字索引,那就保存到一个对象中也是可以的。总之这些数据因为可能数量不定,最好是在一个数组或对象中集中访问和管理。

如果一定要达到这样的效果,你可以将值交给window,代码如下:

for(var i=0;i<10;i++) {
   window['a' + i] = {
       name: i
   };
}
console.log(a1)
console.log(a2)
console.log(a3)

我也建议将这样的操作交给数组或者对象

这种方式的变量最恰当的是放在数组里,再不济也是放在对象里。定义n个变量是为了什么。

直接保存string不就行了
 for(var i=0;i<5;i++){
    var  string=`var a${i}={name:${i}}`
     console.log(string)
    eval(string)
 }

 console.log(a2)  //var a0={name:0}
     //var a1={name:1}
   //var a2={name:2}
    //var a3={name:3}
     //var a4={name:4}
    // Object {name: 2}

for循环的i是替换不到变量名里的,这种情况还是用数组吧,用起来也方便

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题