键值对初始化不能与变量一起使用?

时间:2019-05-03 15:46:49

标签: javascript google-apps-script

我试图理解为什么这两行代码的行为方式有所不同,我也试图使用示例二中的变量来创建示例一中的行为,请参见以下示例:

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

按预期返回月亮。

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

返回未定义。

3 个答案:

答案 0 :(得分:3)

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

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;}

答案 1 :(得分:2)

您可以使用对象符号:

  Browser.msgBox(kv2.f);

答案 2 :(得分:0)

这两种方法对我有用:

在这种情况下,您实际上可以看到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]);
}