Какой тип "ключей" в JavaScript? - PullRequest
20 голосов
/ 31 августа 2010

Я впал в один из тех моментов, когда просто теряю фокус и начинаю задумываться над глупым вопросом:

var a = {
  b: "value"
}

Что такое typeof 'b', и я имею в виду не typeof "значение", а фактический ключ, помеченный как b?

фон: Я начал задумываться об этом, когда мне пришлось создать ключ, представляющий собой строку:

var a = {
  "b": "value"
}

потому что на более позднем этапе он упоминается как:

a["b"]

А затем удивился исходному вопросу.

Ответы [ 5 ]

25 голосов
/ 31 августа 2010

В буквальном смысле объекта, b - это свойство.Свойства являются либо строками, либо символами в JavaScript, хотя при определении имени свойства внутри литерала объекта можно опустить разделители строк.

for (key in a) {
    alert(typeof key);
    //-> "string" or "symbol"
}
10 голосов
/ 05 марта 2012

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

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'

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

С Имена свойств / ключи объектов без кавычек в JavaScript , моя статья по теме:

Кавычки можно опускать только в том случае, если имя свойства представляет собой числовой литерал или допустимое имя идентификатора .

[...]

Обозначение в скобках можно безопасно использовать для всех имен свойств.

[...]

Точечная запись может использоваться только , когда имя свойства является допустимым идентификатором имени.

Я также создал инструмент, который сообщит вам, можно ли использовать любое заданное имя свойства без кавычек и / или с точечной нотацией. Попробуйте это в mothereff.in / js-properties .

Screenshot

2 голосов
/ 31 августа 2010

Помните, что объекты JavaScript являются хеш-таблицами, а ключи - просто строками. Вы можете опустить кавычки вокруг имен свойств во время объявления, но если вы используете зарезервированные слова для имен свойств или любых других имен, которые, как оказалось, являются недействительными идентификаторами, например, начинаются с цифры или содержат пробелы, вам придется обернуть свойство имена в кавычках:

var a = {
  "1b":       "value",
  "b and c":  "value",
  "+12345":   "value"
};

Также обратите внимание, что вы можете ссылаться на свойства объектов, используя точечную запись или запись нижнего индекса независимо от того, использовались ли кавычки, когда они были объявлены. Однако, если вы используете имена свойств, которые будут недопустимыми идентификаторами, например, в приведенном выше примере, вы будете вынуждены использовать нижнюю запись:

a.1b             // invalid (dot notation)
a["b and c"];    // valid   (subscript notation)
2 голосов
/ 31 августа 2010

b - это строка, это просто сокращенный синтаксис, поэтому вы пишете

var a = {
    b: "value"
}

вместо

var a = {
  "b": "value"
}
0 голосов
/ 19 февраля 2017

var a = {$ : 'hello', 2123 : 'number'};
for(var key in a) {
  console.log(typeof key)
}

Ключи в объектах javascript могут быть строками и символами. Символ является примитивным типом данных в JavaScript.

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