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?
Przypuszczam, że konwencja w javascript właśnie wyciekła z pracy z dużą ilością JSON wtedy ... – chakrit
Wierzę, że zgodność z Pythonem została wymieniona jako powód cytowania – cobbal
@ 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. –