以下代码正常运行:
function a() { console.log("a"); };
function b() { console.log("b"); };
var F = {1:a,2:b};
F[1](); // log "a"
F[2](); // log "b"
但这个没有:
function a() { console.log("a"); };
function b() { console.log("b"); };
var A = 1;
var B = 2;
var F = {A:a,B:b};
F[A](); // log "TypeError : F[A] is not a function"
这个想法是A和B是常数整数,仅用于代码可读性。我知道没有" const"在javascript中,但你明白了。
获得类似工作的干净方法是什么? (如果A和B在最后有效地保持不变,我不在乎那么多,只是让它们大写表示我未来不会改变它们的价值)。
答案 0 :(得分:7)
在ES6中,使用计算属性名称:
{ [A]: a }
答案 1 :(得分:2)
您正在使用A
和B
作为您正在创建的JavaScript对象中的标识符,但它们并未引用您声明的变量。
相反,您必须将它们添加到JavaScript对象中,如下所示:
function a() { console.log("a"); };
function b() { console.log("b"); };
var A = 1;
var B = 2;
var F = {};
F[A] = a;
F[B] = b;
F[A]();
答案 2 :(得分:1)
在对象文字中,所有“键”都被解释为字符串,带或不带引号。因此,您的密钥为"A"
,而不是1
。您的示例等同于var F = { "A": a, "B": b }
。
不幸的是,您根本无法将变量用于对象文字中的键。
设置变量键的唯一方法是使用括号表示法:
F[A] = a;