Javascript中的自动枚举

时间:2011-03-10 21:20:29

标签: javascript object enums

我想创建C类型枚举,值从0开始自动生成 以下代码有什么问题?

function ArrayToEnum(arr)
{
    var len = arr.lenght;
    en = {};
    for(i=0;i<len;i++)
        en[arr[i]]=i;
    return en;
}

a=['foo','bar'];
b=ArrayToEnum(arr);
console.debug(b.foo);

> Undefined

我希望它打印0但是(至少在Chromium 9.0中)这是未定义的。如果不是调用函数,而是直接应用函数,它可以工作:

var l=a.length;
for(i=0;i<l;i++) b[a[i]]=i;
console.debug(b.foo);

> 0

该功能有什么问题?

1 个答案:

答案 0 :(得分:3)

如果这是您的实际代码,“长度”在第三行拼写错误为“lenght”:

 var len = arr.lenght;

我希望编译,但它会将len设置为等于undefined,这会阻止你的循环体执行。这会导致arr.foo a.k.a。arr["foo"]undefined,正如您在输出中看到的那样。

当前一行中的数组被称为"arr"而非ArrayToEnum()时,您将a传递给arr

这里的共同主题是,当你开始讨论尚未定义的变量时。 JavaScript“帮助”定义它,而不是告诉你它还不存在。

我在Chrome JS控制台中尝试过,我得到了“引用错误”,直到我修复了“a”/“arr”问题。一旦修复,我就像你描述的那样“未定义”。

当我修改“lenght”,宾果游戏时,它会打印“0”。