我想创建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
该功能有什么问题?
答案 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”。