3242 Stimmen

Erkennen einer undefinierten Objekteigenschaft

Wie kann man am besten überprüfen, ob eine Objekteigenschaft in JavaScript undefiniert ist?

13voto

DenisS Punkte 1597

' if (window.x) { } ' ist fehlerfrei

Höchstwahrscheinlich wollen Sie if (window.x) . Diese Prüfung ist auch dann sicher, wenn x nicht deklariert wurde ( var x; ) - der Browser gibt keine Fehlermeldung aus.

Beispiel: Ich möchte wissen, ob mein Browser History API unterstützt

if (window.history) {
    history.call_some_function();
}

Wie das funktioniert:

Fenster ist ein Objekt, das alle globalen Variablen als seine Mitglieder enthält, und es ist legal, auf ein nicht vorhandenes Mitglied zuzugreifen. Wenn x nicht deklariert wurde oder nicht gesetzt wurde, dann window.x gibt zurück. undefiniert . undefiniert führt zu falsch wenn if() wertet sie aus.

13voto

Ricky Punkte 5275

Die Lösung ist falsch. In JavaScript,

null == undefined

wird true zurückgeben, da beide in einen Boolean "gecastet" werden und false sind. Der korrekte Weg wäre, zu prüfen

if (something === undefined)

was der Identitätsoperator ist...

13voto

sam Punkte 38898
"propertyName" in obj //-> true | false

10voto

bevacqua Punkte 45226

Vergleiche mit void 0 für Knappheit.

if (foo !== void 0)

Es ist nicht so ausführlich wie if (typeof foo !== 'undefined')

10voto

Anoop Punkte 22416

Mit folgendem Code können Sie ein Array mit undefinierten Pfaden erhalten.

 function getAllUndefined(object) {

        function convertPath(arr, key) {
            var path = "";
            for (var i = 1; i < arr.length; i++) {

                path += arr[i] + "->";
            }
            path += key;
            return path;
        }

        var stack = [];
        var saveUndefined= [];
        function getUndefiend(obj, key) {

            var t = typeof obj;
            switch (t) {
                case "object":
                    if (t === null) {
                        return false;
                    }
                    break;
                case "string":
                case "number":
                case "boolean":
                case "null":
                    return false;
                default:
                    return true;
            }
            stack.push(key);
            for (k in obj) {
                if (obj.hasOwnProperty(k)) {
                    v = getUndefiend(obj[k], k);
                    if (v) {
                        saveUndefined.push(convertPath(stack, k));
                    }
                }
            }
            stack.pop();

        }

        getUndefiend({
            "": object
        }, "");
        return saveUndefined;
    }

jsFiddle enlace

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X