Warum ist localStorage["..."] nicht definiert, aber "localStorage".getItem("...") null ist?
Letzte mal habe ich geprüft, die folgenden zwei Zeilen zurückgegeben true
:
null == localStorage["foo"];
null == localStorage.getItem("foo");
Gleiche gilt beim Austausch null
mit undefined
.
Also die erste Frage ist, warum gibt es zwei Möglichkeiten, um das localStorage? Und warum
localStorage["foo"]
zurück undefined
während
localStorage.getItem("foo")
zurück null
?
Muss ich aufpassen, dass bei der Entwicklung von JS?
- Ah, die Freuden von Javascript.
- die Sprache ist in Ordnung, es ist die Umsetzung Variationen, die es töten 🙁
- Natürlich, ob es zurück
undefined
odernull
, wirst du immer noch mit ihm zu beschäftigen. Warum nicht einfach überprüfen, für beide? Siehe auch programmers.stackexchange.com/a/268125 - Ich würde das tun, wenn nötig, aber ich möchte vermeiden unnötige Gemeinkosten, die warum-Fragen wie diese die mich stören. Wenn etwas unbestimmtes gibt immer
true
wenn geprüft gegennull
, warum sollte ich (zusätzlich) überprüfen, ob es undefiniert? - Sehen muchweb die Antwort von unten. Überprüfen Sie auch, ob der link, den ich oben gepostet; mit
==
mitnull
prüft auch, obundefined
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Web Storage-Spezifikation erfordert, dass
.getItem()
zurücknull
für einen unbekannten Schlüssel.Beachten Sie jedoch, dass
.getItem()
und.setItem()
sind speziell in der IDL definiert als das bezeichnetgetter
undsetter
für dieStorage
- Schnittstelle, und daher sind Sie auch voll unterstützt Möglichkeiten, auf die Inhalte der Speicher.Jedoch die
[]
syntax ähnelt mehr einem normalen Objekt-und/oder array-Eigenschaft getter, und wie jene zurückundefined
für eine unbekannte Eigenschaft name.Den Grund nicht Verwendung
[]
syntax ist, dass es ausgeführt wird über die Objekt-Eigenschaften die erste und wird auch ganz glücklich, erlauben Sie überschreiben Reale Eigenschaften und Methoden derlocalStorage
Objekt -, c -.f:"function () { return 0 }"
.localStorage["..."]
ungültig ist die Verwendung von localstorage. Sie versuchen, Zugriff auf Methoden derlocalstorage
Objekt, sondern als Zugriff auf die eigentliche Datenbank.Verwenden Sie
und
Methoden zum Zugriff auf storage-Datenbank.
setItem()
und bekommen es mit[]
funktioniert genauso gut wie die andere Weise Runde.Object.keys(localStorage)
. Die.getItem
ist deutlich sicherer, aber es ist schwer zu behaupten, dass die[]
Methode ist ungültig.localStorage['foo'] = 'bar';
sollte nicht einen Fehler zurück, aber es nur schaffen ein Element in das localStorage-ObjektlocalStorage['foo'] = 'bar' then not only can I inspect that value in my debugger, but the
.length` - Eigenschaft ändert sich auch, und allem der Wert wird dauerhaft in meinem browser!In javascript erhalten Sie immer eine
undefined
Wert für Schlüssel, die nicht existieren in einem Objekt.In localStorage
.getItem
ist eine Methode, die überprüft, Schlüssel im localStorage-Objekt und zurücknull
wenn Sie Sie nicht finden.Nicht die Schuld javascript, es ist nur das localStorage-Objekt Verhalten