Odpowiedzi:
Nie, cytaty nie mają znaczenia (chyba że, jak zauważyłeś, chcesz użyć klucza, który nie jest prawidłowym identyfikatorem JavaScript).
Jako marginesie, JSON format wymiany danych nie wymagają cudzysłowie identyfikatorów (ani nie pozwolić apostrofów).
Z niecytowanych nazw właściwości / kluczy obiektów w JavaScript , mój komentarz na ten temat:
Cytaty można pominąć tylko wtedy, gdy nazwa właściwości jest literałem numerycznym lub prawidłową nazwą identyfikatora .
[…]
Notację w nawiasach można bezpiecznie stosować dla wszystkich nazw właściwości.
[…]
Notacji kropkowej można używać tylko wtedy, gdy nazwa właściwości jest prawidłową nazwą identyfikatora.
Należy pamiętać, że zastrzeżone słowa mogą być używane jako niecytowane nazwy właściwości w ES5. Jednak dla kompatybilności wstecznej z ES3, i tak sugeruję ich cytowanie.
Stworzyłem również narzędzie, które powie ci, czy dana nazwa właściwości może być używana bez cudzysłowów i / lub z notacją kropkową. Wypróbuj na mothereff.in/js-properties .
Tutaj nie ma różnicy. Tylko kwestia stylu. Jednym z powodów tego jest możliwość użycia „super” lub „class” jako klucza, ponieważ są to zastrzeżone słowa kluczowe.
Niektórzy ludzie mogą mieć pokusę, aby podać ciąg znaków z białymi spacjami, a następnie wywołać o [„Mogę mieć białe spacje”].
Nie, nie javascript. Jednak niektóre parsery JSON zakończą się niepowodzeniem, gdy nie będzie cytatów wokół kluczy.
Są sytuacje, w których są różne. Na przykład, jeśli używasz jQuery i tworzysz listę parametrów do przekazania podczas wywoływania komendy jQuery $ () w celu utworzenia elementu, słowa cytowane zamieniane są w parametry, a słowa niecytowane zamieniane w funkcje. Na przykład „size” ustawi atrybut size obiektu, a size (bez cudzysłowów) wywoła funkcję size () na obiekcie. Zobacz jQuery () , u dołu:
Chociaż drugi argument jest wygodny, jego elastyczność może prowadzić do niezamierzonych konsekwencji (np. $ („
<input>”, {Size: „4”}) wywołując metodę .size () zamiast ustawiania atrybutu size). Poprzedni blok kodu można zatem zapisać jako:
obj = { 12e34: true };to nie to samo coobj = { '12e34': true };. Pierwszy z nich wymagałby dostępu do nieruchomości przezobj['1.2e+35'], podczas gdy drugi byłby używanyobj['12e34']. Zobacz moją odpowiedź, aby uzyskać więcej informacji.