Javascript中的自动枚举

Javascript中的自动枚举,javascript,object,enums,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 函数ArrayToEnu

我想创建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
函数ArrayToEnum(arr)
{
var len=平均长度;
en={};
对于(i=0;i未定义)
我希望它打印0,但(至少在Chromium 9.0中)这是未定义的。如果不调用函数,而是直接应用主体,则它可以工作:

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

> 0
var l=a.length;
对于(i=0;i=0

函数有什么问题?

如果这是您的实际代码,则第三行中的“length”拼写错误为“lenght”:

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

另外,当前一行中的数组被调用为
a
,而不是
arr
时,您正在将
“arr”
传递到
ArrayToEnum()

这里的共同主题是,当您开始谈论一个尚未定义的变量时,JavaScript“有益地”定义了它,而不是告诉您它还不存在

我在Chrome JS控制台中尝试了它,我得到了“参考错误”,直到我修复了“a”/“arr”问题。修复后,我得到了您描述的“未定义”


当我修正了“lenght”时,答对了,它会打印“0”。

如果这是您的实际代码,“length”在第三行被拼错为“lenght”:

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

另外,当前一行中的数组被调用为
a
,而不是
arr
时,您正在将
“arr”
传递到
ArrayToEnum()

这里的共同主题是,当您开始谈论一个尚未定义的变量时,JavaScript“有益地”定义了它,而不是告诉您它还不存在

我在Chrome JS控制台中尝试了它,我得到了“参考错误”,直到我修复了“a”/“arr”问题。修复后,我得到了您描述的“未定义”


当我修正了“lenght”时,答对了,它会打印“0”。

你在代码的第三行拼写错误了
length
。这个错误也存在于你的实际代码中吗?还有-这有什么意义?你在代码的第三行拼写错误了
length
。这个错误也存在于你的实际代码中吗?还有-这有什么意义?“a”/“arr”是复制/粘贴错误,在源代码中是正确的,但该死的我拼错了长度。谢谢。“a”/“arr”是复制/粘贴错误,在源代码中是正确的,但该死的我拼错了长度。谢谢。