2009-04-07 8 views
6

W większości serializatorów/deserializatorów JSON część "kluczowa" w słowniku javascript/tablicy mieszającej jest zapisana jako ciąg.Dlaczego część "kluczowa" w haszyszu/dykcie JS powinna być łańcuchem?

Jakie korzyści wynikają z używania ciągu jako klucza, a nie po prostu wpisania zamierzonej nazwy?

Na przykład, powiedzmy zdefiniować dwa obiekty k1 i k2 tak:

var k1 = { a: 1, b: 2, c: 3 };   // define name normally 
var k2 = { "a": 1, "b": 2, "c": 3 }; // define name with a string 

I pobiegł następujące testy:

alert(k1 == k2);     // false (of course) 

alert(k1.a == k2.a);    // true 
alert(k1["b"] == k2["b"]);   // true 

alert(uneval(k1));     // returns the k1 object literal notation. 
alert(uneval(k2));     // returns the same string as above line. 

alert(uneval(k1) == uneval(k2)); // true 

Więc jaki jest sens posiadania kluczy być w podwójnie cudzysłowy (ciąg znaków) tak jak w sposobie zdefiniowania k2 zamiast po prostu wpisywać nazwy kluczy w taki sposób, jak w definicji k1?


Właśnie widziałem to na co Ajaxian wskazując Aaron Boodman's blog entry:

chromium.tabs.createTab({ 
"url": "http://www.google.com/", 
"selected": true, 
"tabIndex": 3 
}); 

Skoro również użyć sprawę wielbłąda dla TabIndex, ja nie widzę żadnego sensu w użyciu ciąg w ogóle.

Dlaczego nie:

chromium.tabs.createTab({ 
url: "http://www.google.com/", 
selected: true, 
tabIndex: 3 
}); 

Dlaczego by ninja JS następująco konwencję toczenia url, selected i tabIndex na sznurku?

Odpowiedz

6

Ponieważ JSON jest podzbiorem rzeczywistej składni literalnej JavaScript. Dla uproszczenia implementacji parserów JSON, podwójne cudzysłowy są zawsze wymagane wokół łańcuchów, a ponieważ klucze w JSON są łańcuchami, są tam wymagane.

Nie wszystkie legalne JavaScript są legalne JSON. Chociaż możesz definiować literały obiektów w JavaScript bez cudzysłowów, jeśli chcesz współpracować z JSON, będziesz musiał je umieścić.

+0

Przypuszczam, że konwencja w javascript właśnie wyciekła z pracy z dużą ilością JSON wtedy ... – chakrit

+0

Wierzę, że zgodność z Pythonem została wymieniona jako powód cytowania – cobbal

+0

@ chakrit Tak. Ponadto, jak zauważył Gizmo, generalnie bezpieczniejsze jest używanie cudzysłowów w JavaScript, ponieważ nie musisz się martwić słowami zastrzeżonymi.Na przykład {do: "coś"} nie jest legalnym JavaScriptem. –

1

W ten sposób unika się użycia błędu, słowa kluczowego zarezerwowanego javascript, na przykład "do". Użycie notacji smyczkowej zapewniło ci bezpieczną stronę.

0

Jeśli wierzyć diagramowi składni na json.org, nazwy właściwości bareword są niestandardowe. W ilu przeglądarkach uruchomiłeś testy?

+0

Nie wiele ... ale ja * nie * utrzymuję ogromną aplikację javascript w pracy. Używam nieustannych nazwisk (np. Tworzenie klasy i podobnych) i działa we wszystkich głównych przeglądarkach ... IE FF Opera Safari. – chakrit

+0

JSON jest podzbiorem JavaScript. Wymaga cytatów, ale JavaScript tego nie robi. –

0

Oprócz uciec od zastrzeżonych słów kluczowych rzeczywiście można użyć niezależnie od znaków w nazwach swoich własności - ze spacjami dwukropkami ...

Naprawdę nie wiem, dlaczego to robisz. Wolę używać normalnej notacji "obiektowej".

Powiązane problemy