我正在尝试理解为什么这两行代码的行为行为不同,我也试图在示例中使用诸如示例的变量(例如第二个(创建示例中的行为,请参见示例下图:
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.7
和1.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]);
}