我试图理解为什么这两行代码的行为方式有所不同,我也试图使用示例二中的变量来创建示例一中的行为,请参见以下示例:
var kv = {
'abc': 'moon',
};
Browser.msgBox(kv['abc']);
按预期返回月亮。
var f = 'abc';
var r = 'moon';
var kv2 = {
f: r,
};
Browser.msgBox(kv2[f]);
返回未定义。
答案 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.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;}
答案 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]);
}