2011-03-10 86 views
0

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

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,而是(至少在铬9.0),这是不确定的。如果不是调用函数,我直接套用体,它的工作原理:

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

> 0 

什么是错的功能?

+2

您在代码的第三行拼写错误'length'。您的实际代码中是否存在该错误?另外 - 这是什么意思? – 2011-03-10 21:22:27

回答

3

如果这是你的实际代码,“长度”的拼写错误作为三线“lenght”:

var len = arr.lenght; 

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

另外,当您将上一行中的数组称为a而不是arr时,您还将"arr"传递至ArrayToEnum()

这里的常见主题是,当你开始谈论你尚未定义的变量时。 JavaScript“有用地”定义它,而不是告诉你它还不存在。

我在Chrome的JS控制台上试了一下,我得到了“引用错误”,直到我修复了“a”/“arr”问题。一旦这个问题得到解决,我就会得到“未定义”的描述。

当我固定“lenght”,宾果,它打印“0”。

+0

“a”/“arr”是复制/粘贴错误,它在源代码中是正确的,但该死的我拼错了长度。谢谢。 – 2011-03-10 21:29:00