Nella maggior parte dei serializzatori/deserializzatori JSON, la parte "chiave" in un dizionario javascript/array hash viene scritta come una stringa.Perché la parte "chiave" in un hash/dict JS deve essere una stringa?
Qual è il vantaggio di utilizzare una stringa come chiave invece di digitare semplicemente il nome previsto?
Ad esempio, dire io definisco due oggetti k1
e k2
in questo modo:
var k1 = { a: 1, b: 2, c: 3 }; // define name normally
var k2 = { "a": 1, "b": 2, "c": 3 }; // define name with a string
E poi corse le seguenti prove:
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
Allora, qual è il punto di avere le chiavi siano in sono state definite doppie virgolette (una stringa) come nel modo k2
invece di digitare semplicemente i nomi dei tasti come nel modo in cui è stato definito k1
?
Ho appena visto questo oltre a Ajaxian indicando Aaron Boodman's blog entry:
chromium.tabs.createTab({
"url": "http://www.google.com/",
"selected": true,
"tabIndex": 3
});
Dal momento che usa anche per caso cammello tabIndex, non vedo alcun punto nel usando una stringa a tutti.
Perché non:
chromium.tabs.createTab({
url: "http://www.google.com/",
selected: true,
tabIndex: 3
});
Perché un ninja JS segue la convenzione di trasformare url
, selected
e tabIndex
in una stringa?
Suppongo che la convenzione in javascript sia stata trapelata dall'aver lavorato con un sacco di JSON quindi ... – chakrit
Credo che la compatibilità con Python sia stata citata come motivo per le citazioni – cobbal
@chakrit Sì. Inoltre, come sottolineato da gizmo, è generalmente più sicuro usare le virgolette in JavaScript poiché non devi preoccuparti delle parole riservate.Ad esempio {do: "something"} non è un JavaScript legale. –