Czy jest jakaś różnica między
obj = {'foo': 'bar'}
i
obj = {foo: 'bar'}
Zauważyłem, że nie można użyć -
klucza, gdy nie używam cytatów. Ale czy to rzeczywiście robi różnicę? Jeśli tak to jakie?
javascript
meo
źródło
źródło
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.Z niecytowanych nazw właściwości / kluczy obiektów w JavaScript , mój komentarz na ten temat:
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 .
źródło
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”].
źródło
Nie, nie javascript. Jednak niektóre parsery JSON zakończą się niepowodzeniem, gdy nie będzie cytatów wokół kluczy.
źródło
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:
źródło