Javascript Object - ключ, начинающийся с номера, разрешен?
Разрешено ли это?
myObj = {};
myObj['4a56546s6d']
Или ключ должен начинаться с буквы типа:
myObj = {};
myObj['x4a56546s6d']
Можно ли смешивать оба типа:
myObj = {};
myObj['x4a56546s6d']
myObj['4a56546s6d']
Я прошу, потому что somethings (например, ID в HTML) должны начинаться с буквы. В настоящий момент у меня есть третья версия, и FireBug отмечает клавиши (начиная с цифры) синим цветом.
Ответы
Ответ 1
Вы можете использовать любую клавишу, если вы используете [string]
для доступа к ключу, даже к ключу с пробелом. Все они действительны:
myObj['key with space']
myObj['12345']
Но если вы хотите использовать оператор dot .
для доступа к ключу, тогда ключ должен быть действительным идентификатором, что означает, что они не могут начинаться с числа или содержать пробел.
Ответ 2
Точечным оператором вы можете получить доступ к значениям из ключей, которые не содержат пробелов или специальных символов, слова, начинающиеся с номера (т.е. те, которые не могут использоваться, например, имена переменных), в противном случае вы можете получить любое выражение для они как ключи в ассоциативном массиве.
Вы можете использовать как ключ, как все, что хотите, но помните, что ключ будет строковым представлением того, что вы ввели. Разъяснение - будет вызвано toString().
Облик:
var myObj = {};
myObj[ 3 ] = "key is 3";
alert( myObj[ "3" ] ); //alerts "key is 3" because (3).toString() is "3"
//but an error will thrown when accessing by myObj.3
myObj[ {} ] = "key is {}"
alert( myObj["[object Object]"] ) // alerts "key is {}" because ({}).toString() is "[object Object]"
Вы можете переопределить метод toString()
, например:
Object.prototype.toString = function(){ return "object"}
a = {};
a[ {} ] = "whatever";
alert( a["object"] ); // alerts "whatever" because as now toString() returns "object" from each created object
Ответ 3
Смотрите эту страницу: https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Core_Language_Features#Variables
Идентификатор JavaScript должен начинаться с буквы, подчеркивания (_) или знака доллара ($); последующие символы также могут быть цифрами (0-9). Поскольку JavaScript чувствителен к регистру, буквы включают символы "A" - "Z" (верхний регистр) и символы "a" - "z" (строчные буквы).
Вы можете использовать его таким образом, но вы не сможете получить доступ к данным с помощью myObj.4a56546s6d
, потому что запуск идентификатора с номером не разрешен.
Ответ 4
Если ваш ключ (имя свойства) является строковым литералом, он совершенно корректен, чтобы иметь цифру в качестве ее первого символа.
См. ответы на этот вопрос для получения дополнительной информации о действительных ключах в JS.