2

我需要在for循环内的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({ 
4

3 回答 3

11

使用数组:

var marker = [];

for (i=0; i < location.length; i++) {
   marker[counter] = new google.maps.Marker({
于 2013-01-21T16:24:25.540 回答
4

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

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

现在可以使用相同的方括号表示法访问它

window["marker_0"]...

或点符号

window.marker_0
于 2013-01-21T16:26:25.200 回答
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 键可以是任何 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 键甚至可以是一个对象。

于 2019-06-12T16:41:15.757 回答