【问题标题】:Dynamic variable name in loop循环中的动态变量名
【发布时间】:2013-01-21 16:22:49
【问题描述】:

我需要在js里面for循环创建动态变量名

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({ 

【问题讨论】:

  • 你会想要使用 eval() 让事情以这种方式工作。但是,请使用数组解决方案,IMO。
  • 我没有看到像这样在循环中创建动态变量的意义,因为上下文只会在当前迭代的范围内。如果您希望在循环之外重用,则需要使用数组。
  • 这与 PHP 无关。我什至不明白这是如何处理 jQuery 的,但我会让 JS 专业人士来处理。
  • 我删除了 [jQuery] 标签 - 这与 jQuery 无关。

标签: javascript


【解决方案1】:

使用数组:

var marker = [];

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

【讨论】:

    【解决方案2】:

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

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

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

    window["marker_0"]...
    

    或点符号

    window.marker_0
    

    【讨论】:

      【解决方案3】:

      由于这个问题被用作重复目标:

      Use an array 是一个很好的建议,如果您要访问的信息是以数字形式键入的。如果不是,您有两种选择:

      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 键甚至可以是一个对象。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-28
        • 2016-07-10
        • 1970-01-01
        • 1970-01-01
        • 2021-11-18
        • 2015-03-06
        • 1970-01-01
        • 2019-02-05
        相关资源
        最近更新 更多