【问题标题】:javascript : dictionary of functions with "constant" integer as keysjavascript:以“常量”整数为键的函数字典
【发布时间】:2014-11-18 04:50:21
【问题描述】:

以下代码运行良好:

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 将是常量整数,仅用于代码可读性。我知道 javascript 中没有“const”,但你明白了。

获得这样的工作的干净方法是什么? (我不太关心 A 和 B 最后是否有效不变,只是将它们大写表示我未来不会改变它们的值)。

【问题讨论】:

标签: javascript dictionary constants function-pointers


【解决方案1】:

在 ES6 中,使用计算属性名称:

{ [A]: a }

【讨论】:

【解决方案2】:

您在创建的 JavaScript 对象中使用 AB 作为标识符,它们没有引用您声明的变量。

相反,您必须像这样将它们添加到 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]();

【讨论】:

  • 我很困惑,以为我的代码和你的代码完全一样……我的第一批 JavaScript 代码带来了很多惊喜
【解决方案3】:

在一个对象字面量中,所有的“键”都被解释为字符串,带或不带引号。所以你的密钥是"A",而不是1。您的示例等效于var F = { "A": a, "B": b }

不幸的是,您根本不能将变量用作对象文字中的键。

设置变量键的唯一方法是使用括号表示法:

F[A] = a;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 2013-12-21
    • 1970-01-01
    相关资源
    最近更新 更多