【问题标题】:Key Value Pair initialization not working with variable?键值对初始化不适用于变量?
【发布时间】:2019-05-03 15:46:48
【问题描述】:

我试图理解为什么这两行代码的行为表现不同我还试图使用示例二中的变量来创建示例一中的行为,请参见下面的示例:

  var kv = {
    'abc': 'moon',
  };
  Browser.msgBox(kv['abc']);

按预期返回月球。

  var f = 'abc';
  var r = 'moon';
  var kv2 = {
    f: r,
  };
  Browser.msgBox(kv2[f]);

返回未定义。

【问题讨论】:

  • 在第二个例子中,使用var kv2 = {[f]: r}; 阅读computed property names。否则,您的密钥名称将是 f,您将不得不这样做 Browser.msgBox(kv2["f"]);
  • @Shidersz Google 应用程序脚本当前使用旧版本的 Ecmascript,因此(尚)不支持计算的属性名称。
  • @DimuDesigns 哦,我明白了,在这种情况下,如果他仍想使用变量中的keyvalue,他将需要执行var kv2 = {}; kv2[f] = r;
  • @Shidersz 没错!
  • 相关解释请看我的回答:stackoverflow.com/a/51732281/9337071

标签: javascript google-apps-script


【解决方案1】:

在第二个示例中,您将 kv2 创建为 object,并带有一个名为 f 的唯一 property

var f = 'abc';
var r = 'moon';
var kv2 = {
  f: r,
};

console.log(kv2);
console.log(kv2.f);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

新的 ECMAScript (ES6) 包含一个名为 computed property names 的功能,该功能足以满足您尝试执行的操作,即使用存储在某个变量中的属性名称。示例:

var f = 'abc';
var r = 'moon';
var kv2 = {
  [f]: r, // Using computed property name!
};

console.log(kv2);
console.log(kv2[f]);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

但是,从wikipedia,您可以看到此功能对您不可用:

Apps Script 是一种脚本语言,用于 G Suite 平台中的轻量级应用开发。它基于JavaScript 1.61.71.8 的某些部分,并提供ECMAScript 5 API 的子集。

所以,如果您仍想使用存储在变量中的属性名称,您能做的最好的事情是:

var f = 'abc';
var r = 'moon';
var kv2 = {};
kv2[f] = r;

console.log(kv2);
console.log(kv2[f]);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

【讨论】:

  • 很好的解释。如果他想使用变量作为属性名称,这应该是公认的答案。
【解决方案2】:

您可以使用对象表示法:

  Browser.msgBox(kv2.f);

【讨论】:

    【解决方案3】:

    这两种方法对我有用:

    在这种情况下,您实际上可以看到 kvr = {f:r} 编辑器显示密钥没有接收替换。

    function sampletest() {
      var f='abc';
      var r='moon';
      var kv2={abc:r};
      Browser.msgBox(kv2[f]);
    }
    
    function sampletest1() {
      var f='abc';
      var r='moon';
      var kv2={};
      kv2[f]=r;
      Browser.msgBox(kv2[f]);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多