钥匙值对初始化不适用于变量



我正在尝试理解为什么这两行代码的行为行为不同,我也试图在示例中使用诸如示例的变量(例如第二个(创建示例中的行为,请参见示例下图:

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

按预期返回月亮。

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

返回未定义的。

在第二个示例中,您将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(包括一个名为"计算属性名称"的功能,该功能适合您尝试执行的操作,即使用存储在某些变量中的属性名称。示例:

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,您可以看到此功能不适合您:

应用程序脚本是一种脚本语言,用于在G Suite平台中开发轻巧的应用程序。它基于JavaScript 1.6,其中某些部分是1.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;}

您可以使用对象符号:

  Browser.msgBox(kv2.f);

这两种方法对我有用:

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

相关内容

最新更新