Авто-перечисление в Javascript - PullRequest
0 голосов
/ 11 марта 2011

Я хочу создать перечисления типа 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 Ответ

3 голосов
/ 11 марта 2011

Если это ваш фактический код, в третьей строке длина слова указывается с ошибкой как длина:

 var len = arr.lenght;

Я ожидал бы, что это скомпилируется, но он установит len равным undefined, что предотвратит выполнение вашего тела цикла. Это приведет к тому, что arr.foo a.k.a. arr["foo"] будет undefined, как вы видите в своем выводе.

Также вы передаете "arr" в ArrayToEnum(), когда ваш массив в предыдущей строке называется a, а не arr.

Общей темой здесь является то, что когда вы начинаете говорить о переменной, которую вы еще не определили. JavaScript «услужливо» определяет его, а не говорит, что его еще не существует.

Я пробовал это в консоли Chrome JS и получал "ошибку ссылки", пока не исправил проблему "a" / "arr". Как только это было исправлено, я получил "неопределенный", как вы описываете.

Когда я фиксирую «длину», в бинго выводится «0».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...