JavaScript - Ermitteln Sie, ob eine Eigenschaft definiert und auf 'undefiniert' oder nicht definiert gesetzt ist
Sagen, ich habe den folgenden code:
function One() {}
One.prototype.x = undefined;
function Two() {}
var o = new One();
var t = new Two();
o.x
und t.x
wird bewertet, um undefined
. o.hasOwnProperty('x')
und t.hasOwnProperty('x')
beide return false; das gleiche gilt für propertyIsEnumerable
. Zwei Fragen:
- Gibt es eine Möglichkeit zu sagen, dass o ist.x ist definiert und festgelegt
undefined
? - Gibt es überhaupt keinen Grund zu? (sollten die beiden semantisch äquivalent?)
Eine kleine Einschränkung: tun (für propName in o) - Schleife wird der Ertrag 'x' als eine der Zeichenfolgen, während es in t nicht - es gibt also einen Unterschied, wie Sie intern dargestellt werden (zumindest in Chrome).
InformationsquelleAutor der Frage Claudiu | 2008-12-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen etwas einfacheren Weg, als Ihre Methode ist die Verwendung der Javascript-operator
InformationsquelleAutor der Antwort Greg
Objekt.hasOwnProperty(name) gibt nur true für Objekte, die sich im gleichen Objekt -, und false für alles andere, einschließlich der Eigenschaften, die im Prototyp.
Zusätzlich die nur so tun, eine Eigenschaft zu löschen ist zu löschen. Einstellung undefined NICHT löschen.
Dem richtigen Weg, es zu tun, ist die Verwendung in wie roborg sagte.
Update:
undefined ist ein primitiver Wert, siehe ECMAScript Language Specification Abschnitt 4.3.2 und 4.3.9.
InformationsquelleAutor der Antwort some
Ach, eins für die anti-patterns thread gibt.
undefined
ist kein Schlüsselwort.Bei der Zuweisung schreiben
var foo = undefined;
Sie zuweisen, wird der Wert des symbolsundefined
dem Sie noch nicht definiert ist und daher der Wert, den Sie erhalten ist"undefined"
. Sie würde genau das gleiche Ergebnis, wenn Sie zugewiesen hatte esUnDeFiNeD
oderNotFineAtAll
oder_qwertyuiop
Warum ist das so schrecklich? Gut, abgesehen von der Tatsache, dass es führt zu einem falschen Verständnis dessen, was vorgeht, was geschieht, wenn Sie geschehen, laden Sie eine Bibliothek oder mieten Sie ein dev, der schreibt
var undefined = true;
InformationsquelleAutor der Antwort annakata
Sowas?
.. oder ..
InformationsquelleAutor der Antwort adam
Nicht. Ich glaube nicht, dass eine variable gleich
undefined
sollte erkannt werden, wie "definiert".Einstellung es gleich
undefined
direkt ist nur eine faule Art und Weise zu löschen. -- adaptiert, um mit derdelete
Schlüsselwort. Ich glaube, dass dies nur bedeutet, dass die garbage collection nicht ergriffen hat Auswirkungen auf die variable/Eigenschaft.[BEARBEITEN]
Bezug auf Ihren Kommentar über
hasOwnProperty
undpropertyIsEnumerable
-, Prototypen-Eigenschaften/Methoden sind weder das Objekt selbst noch Durchlaufen werden.InformationsquelleAutor der Antwort Jonathan Lonowski
Einen Weg, es zu tun, ist dies:
wo
contains
nur überprüft, ob ein element im array ist'x'
. Ist dies der einzige Weg?InformationsquelleAutor der Antwort Claudiu
Könnten Sie versuchen, indem eine Uhr auf.x aber das würde Ihnen nur sagen, zur Zeit wird es nicht definiert.
InformationsquelleAutor der Antwort nickf