Каков тип "ключей" в JavaScript?
Я врезался в один из тех моментов, когда я просто теряю фокус и начинаю задаваться вопросом о глупости:
var a = {
b: "value"
}
Что такое typeof 'b', и я не имею в виду тип "value", но фактический ключ, обозначенный как b?
фон:
Я начал задаваться вопросом об этом, когда мне пришлось создать ключ, который является строкой:
var a = {
"b": "value"
}
потому что в более поздней точке это называется:
a["b"]
И затем погрузился в вопрос, задавая оригинальный вопрос.
Ответы
Ответ 1
В буквальном смысле объекта, b
является свойством. Свойства являются либо строками, либо символами в JavaScript, хотя при определении имени свойства внутри литерала объекта можно опустить разделители строк.
for (key in a) {
alert(typeof key);
//-> "string"
}
Ответ 2
Имена свойств автоматически принудительно вводятся в строку. Вы можете попробовать это самостоятельно, используя числовой литерал как имя свойства.
var object = {
.12e3: 'wut'
};
object[.12e3]; // 'wut'
object['.12e3']; // undefined
object['120']; // 'wut'
// Let’s try another numeric literal:
object = {
12e34: 'heh'
};
object[12e34]; // 'heh'
object['12e34']; // undefined
object[1.2e35]; // 'heh'
object['1.2e35']; // undefined
object[1.2e+35]; // 'heh'
object['1.2e+35']; // 'heh'
По этой причине Id рекомендует использовать только строковые литералы для имен свойств.
Из Некотируемые имена свойств/объектные ключи в JavaScript, моя запись по теме:
Цитаты могут быть опущены только в том случае, если имя свойства является числовым литералом или допустимым именем идентификатора.
[...]
Обозначение скобок можно безопасно использовать для всех имен свойств.
[...]
Точечная нотация может использоваться только тогда, когда имя свойства является допустимым именем идентификатора.
Я также создал инструмент, который расскажет вам, можно ли использовать любое имя свойства без кавычек и/или с точечной нотацией. Попробуйте в mothereff.in/js-properties.
![Screenshot]()
Ответ 3
b - строка, это просто сокращенный синтаксис, поэтому вы пишете
var a = {
b: "value"
}
вместо
var a = {
"b": "value"
}
Ответ 4
Имейте в виду, что объекты JavaScript - это хеш-таблицы, а ключи - просто строки. Вы можете опускать кавычки вокруг имен свойств во время объявления, но если вы используете зарезервированные слова для имен свойств или любого другого имени, которое является недопустимым идентификатором, например, начиная с цифры или с пробелами, вам придется обернуть свойство имена в кавычках:
var a = {
"1b": "value",
"b and c": "value",
"+12345": "value"
};
Также обратите внимание, что вы можете ссылаться на свойства объектов с использованием точечной нотации или нотации индекса независимо от того, используются ли кавычки, когда они были объявлены. Однако, если вы используете имена свойств, которые были бы недопустимыми идентификаторами, такими как те, что указаны в приведенном выше примере, вы вынуждены использовать нотацию индекса:
a.1b // invalid (dot notation)
a["b and c"]; // valid (subscript notation)
Ответ 5
var a = {$ : 'hello', 2123 : 'number'};
for(var key in a) {
console.log(typeof key)
}