循环中的动态变量名

Dynamic variable name in loop

本文关键字:变量名 动态 循环      更新时间:2023-09-26

我需要在js中创建动态变量名

var counter = 0;
for(i=0; i<location.length; i++) {
   ...
   var "marker_" + counter = new google.maps.Marker({

但是当我期望有变量marker_0,marker_1,marker_2,…我有这个错误

Error: SyntaxError: missing variable name
Source Code:
          var "marker_" + counter = new google.maps.Marker({ 

使用数组

var marker = [];
for (i=0; i < location.length; i++) {
   marker[counter] = new google.maps.Marker({

好吧,"使用数组"无疑是正确的答案,但是如果你真的想要动态变量,你需要决定它们的范围-默认是window,然后你可以这样做:

var counter = 0;
for(i=0; i<location.length; i++) {
   ...
   window["marker_" + counter] = new google.maps.Marker({

现在可以用相同的方括号符号

来访问
window["marker_0"]...

或点符号

window.marker_0

既然这个问题被用作重复的目标:

如果要访问的信息是数字关键字,建议使用数组。如果不是,您有两个选项:
  1. 使用对象和动态属性访问

  2. 使用Map (ES2015+)

使用对象

你可以使用字符串(或者,在ES2015+中,符号)通过括号表示法访问对象属性,所以你可以在对象中存储信息,以便以后使用字符串/符号访问:

var theData = Object.assign(Object.create(null), {
    x: "ecks",
    y: "why"
});
var key = Math.random() < 0.5 ? "x" : "y";
console.log("key = " + key + ", theData[key] = " + theData[key]);

使用Map

你可以使用Map而不是对象,即使字符串或符号作为键,但与对象不同的是,Map键可以是任何JavaScript值(除了负0,但是,嘿,足够好了):

const theData = new Map([
    ["x", "ecks"],
    ["y", "why"]
]);
const key = Math.random() < 0.5 ? "x" : "y";
console.log("key = " + key + ", theData.get(key) = " + theData.get(key));

这个例子使用了字符串,但是Map键可以是任何类型。Map键甚至可以是对象