Відповіді:
Ні, лапки не мають значення (якщо, як ви зазначали, ви хочете використовувати ключ, який не є дійсним ідентифікатором JavaScript).
В якості примітки, то формат обміну даними JSON дійсно вимагають подвійні лапки ідентифікатори (і не НЕ дозволяє одинарні лапки).
З імен властивостей / клавіш об'єктів у JavaScript в моєму записі на тему:
Котирування можна опустити, лише якщо ім'я властивості є числовим буквеним чи дійсним ідентифікаційним іменем .
[…]
Нотацію дужок можна безпечно використовувати для всіх імен властивостей.
[…]
Позначення точок можна використовувати лише тоді, коли ім'я властивості є дійсним ідентифікаційним іменем.
Зауважте, що зарезервовані слова дозволяється використовувати як нецитовані імена властивостей у ES5. Однак для зворотної сумісності з ES3 я б запропонував їх все-таки цитувати.
Я також створив інструмент, який підкаже, чи можна використовувати якесь ім'я властивості без лапок та / або з позначенням крапок. Спробуйте це на mothereff.in/js-properties .
Тут немає різниці. Просто питання стилю. Однією з причин цього є можливість використовувати «супер» або «клас» як ключову, оскільки це зарезервовані ключові слова.
Деякі люди можуть спокуситися передати рядок з пробілом, а потім зателефонувати o ['Я можу мати пробіл'], але я б назвав це поганою практикою.
Ні, не в JavaScript. Однак деякі JSON-аналізатори вийдуть з ладу, коли лапок навколо клавіш немає.
Є деякі ситуації, коли вони різні. Наприклад, якщо ви використовуєте jQuery, і ви створюєте список параметрів, які потрібно передавати при виклику команди jQuery $ () для створення елемента, слова, які цитуються, перетворюються на параметри, а слова, які не цитуються, перетворюються на функції. Наприклад, "size" встановить атрибут size об'єкта, а size (без лапок) викличе функцію size () на об'єкті. Дивіться jQuery () , внизу:
Хоча другий аргумент зручний, його гнучкість може призвести до непередбачуваних наслідків (наприклад, $ ("
<input>", {size: "4"}) виклику методу .size () замість встановлення атрибуту size). Попередній блок коду може бути записаний замість цього:
obj = { 12e34: true };не те саме, щоobj = { '12e34': true };. Перший зажадає від вас доступу до ресурсуobj['1.2e+35'], тоді як для другого ви використовуєтеobj['12e34']. Дивіться мою відповідь для отримання більш детальної інформації.