Ich fand diesen Unterschied zwischen undefined
und "undefined"
und ich versuche es zu verstehen.Vergleich mit undefined oder "undefined" beim Prüfen auf Objekteigenschaften. Was ist der Unterschied?
Ich habe geprüft, ob Eigenschaften in Objekten definiert sind oder nicht. Im ersten Beispiel habe ich überprüft, ob die Eigenschaft nicht definiert ist. Alle folgenden Tests werden als wahr ausgewertet. Es spielt keine Rolle, ob ich "undefined"
oder undefined
verwende.
var test = {
x: 1,
y: 2
};
if (test.x != "undefined") console.log('test.x != "undefined"'); //TRUE
if (test.x !== "undefined") console.log('test.x !== "undefined"'); //TRUE
if (test.x != undefined) console.log('test.x != undefined'); //TRUE
if (test.x !== undefined) console.log('test.x !== undefined'); //TRUE
Dann versuchte ich es mit Eigenschaft, die nicht auf true defined.It wird nur ausgewertet, wenn ich undefined
(nicht Stringliteral) verwenden oder mit typeof
.
var test = {
x: 1,
y: 2
};
if (test.z === undefined) console.log("test.z === undefined"); //TRUE
if (test.z == undefined) console.log("test.z == undefined"); //TRUE
if (test.z === "undefined") console.log("test.z === 'undefined'"); //FALSE
if (test.z == "undefined") console.log("test.z == 'undefined'"); //FALSE
if (typeof test.z === "undefined") console.log("typeof test.z === 'undefined'"); //TRUE
Also meine Frage ist: warum der Unterschied (Ich glaube, ich etwas nicht verstehe ...). Ist es eine schlechte Übung, dass ich einen Vergleich mit "undefiniert"/undefiniert statt .hasOwnProperty()
verwendet habe?
Es hängt davon ab, was Sie überprüfen möchten. In den meisten Fällen können Sie einfach Folgendes verwenden: 'if (test.x) {...}' oder 'if (! Text.z) {...}'. Diese Art von Bedingungen überprüfen viele Dinge wie 'undefined', * leere Zeichenfolge *,' 0', 'null',' false'. – Titus
@Titus: Ich möchte nur überprüfen, ob es existiert; Die nächste Stufe ist switch() abhängig von der Eigenschaft. –
In diesem Fall können Sie die Anweisung 'switch' direkt schreiben, es ist keine Prüfung erforderlich. – Titus