2012-06-02 4 views
1

ЭтоJavascript использовать зарезервированное ключевое слово в качестве ключевой

var x = new Array(); 
x['length']=5; 

составит й массив 5 неопределенных элементов, но я на самом деле хочу иметь значение «5» хранятся в ключе «длиной».

Возможно ли это?

+1

Что ваш случай использования? – Quentin

+0

Мне нужно проанализировать файл, содержащий много слов, и сохранить количество вхождений каждого слова. – Cristy

+0

Используйте вместо этого объект: var x = new Object(); x ["length"] = 5; x ["another_key"] = 10; и так далее. Итак, итерации по списку, вы можете сделать: for (var a in x) {...}. – Shredderroy

ответ

5

В массивах javascript нет ключей. Вы ищете объекты:

var x = {} 
x.length = 5; 
+2

Боковое примечание. Поскольку массив является объектом, он на самом деле имеет * ключи *, но ключ 'length' уже используется для свойства. – Guffa

+0

Очень важное различие. Спасибо. То, что я должен был написать, «не предназначено для использования для пар ключ/значение» –

0

Если вы хотите сделать это, вам лучше создать объект, а не массив. Это должно дать вам то, что вы хотите.

var x = {}; 
x['length'] = 5; 
1

Я должен разобрать файл, содержащий много слов и сохранить количество вхождений каждого слова

Используйте объект, и сделать слова ключи. Вы не храните последовательные/упорядоченные данные, поэтому вам не следует использовать массив.

var word_count = {}; 
for (var i; i < words.length; i++) { 
    var word = words[i]; 
    if (word_count[word]) { 
    word_count[word]++; 
    } else { 
    word_count[word] = 1; 
} 
+0

Там вы идете. знак равно – benqus

0

Для хранения данных вы можете использовать объекты вместо массивов. Но если вам нужно использовать массивы (возможно, вам придется использовать их функциональность), вы можете калечить слова и хранить их в виде ключей массива.

Используйте какое-то простое правило, чтобы следовать, чтобы обойти все возможные ключевые слова. Например, префикс всех ключей массива с символом «_». Таким образом, вы всегда можете восстановить исходные слова из ключей, просто удалив их первый символ, и вы уверены, что не ссылаетесь на какое-либо конкретное свойство объектов Array (например, свойство length).

0

Вы можете вызвать методы для объекта javascript, используя два разных синтаксиса. Знакомый «точечный» синтаксис с параметрами parens для вызова метода и синтаксис квадратной скобки. Вы можете «вызывать» метод для объекта javascript, используя синтаксис myObj["methodname"](args). Это удобно, если вы хотите динамически строить имя метода с помощью строк. Помните, что объекты в javascript очень похожи на хеш-таблицу (словарь), где ключи обозначают имена свойств и функций. Если значение ключа содержит функцию, ее можно вызвать (используя круглые скобки).

В вашем примере массив имеет метод «длина». Вы непреднамеренно вызываете свой сеттер (который задает длину массива пустым значениям, т. Е. Неопределенным).

Отложив это в сторону, вы действительно хотите хэш (ассоциативный массив) в этом случае. Массив - это структура данных с индексом смещения.

Простой объект буквальным, как myObj = {} будет достаточно, чтобы дать вам хэш семантики (опять же, объекты в JavaScript являются уже как хэшей), а затем вы можете вызвать myObj.whatever = "some value"

Смежные вопросы