Проблема в том, что вы используете массив JavaScript в качестве ассоциативного массива, что-то, что не является . Индексы массива JavaScript представляют собой 32-разрядные целые числа без знака, и поэтому вы не можете использовать * строки **. Вы могли бы использовать массив как
// I'm guessing that you meant to give numerical and not string values
var arr = [123, 456];
или используйте объект
var obj = {
'A string' : 123,
'Another string' : 456
};
Обратите внимание, что при использовании объекта 'A string'
и 'Another string'
являются свойствами объекта obj
и не могут быть проиндексированы, как значения в массиве. Вы можете проверить, что объект имеет свойство несколькими способами, одним из которых будет использование hasOwnProperty
if (obj.hasOwnProperty('A string')) {
// if obj has property 'A string' as a direct property
}
другой использовал бы ключевое слово in
if ('A string' in obj) {
// if obj has a property 'A string' as a property (could be an inherited property too)
}
**, если строка не является строковым представлением 32-битного целого без знака, как указывает Тим , но я думаю, что будет справедливо сказать, что многие разработчики JavaScript сказали бы, что для ясности придерживайтесь целых . *