2 Stimmen

Was ist falsch mit meinem unmittelbar aufgerufenen Funktionsausdruck?

Ich habe versucht, unten eine sehr einfache IIFE zu machen,

    var obj = new Object;

    (function(_obj) {_obj.prop = 'definiert';})(obj);

    if(typeof obj.prop === undefined)
     alert('undefined');
    else
     alert(obj.prop);

Warum gibt das Skript "undefined" aus, anstatt "definiert" als Ergebnis?

@EDIT

Das Skript hätte wie erwartet funktionieren sollen, außer:

  • Das unbeabsichtigte typeof obj.prop === undefined ist falsch, aber stattdessen sollte obj.prop === undefined verwendet werden.
  • Wenn unten Klammern weggelassen werden, funktioniert das Skript nicht wie erwartet, es wird jedoch kein Syntaxfehler von Rhino gemeldet.

    function(_obj) {_obj.prop = 'definiert';}(obj);

3voto

Ihr Code gibt 'defined' aus, aber aus dem falschen Grund.

Dieses...

typeof obj.prop === undefined

sollte dieses sein...

obj.prop === undefined

...denn typeof gibt einen String zurück, der den Typ des Objekts darstellt.


Verwenden Sie nicht den typeof-Hack, wenn Sie auf undefined prüfen. Das ist verwirrend und kann die Quelle von Fehlern wie dem, auf den Sie gestoßen sind, sein.

Wenn Sie sich so sehr über eine Neuzuweisung von undefined Sorgen machen, dann verwenden Sie dies...

obj.prop === void 0

1voto

Šime Vidas Punkte 172810

Sollte sein:

if ( typeof obj.prop === 'undefined' )

Der typeof Operator gibt Zeichenketten zurück.

1voto

jfriend00 Punkte 632952

typeof gibt einen String zurück. Also brauchst du;

if(typeof obj.prop === "undefined")

Der Code scheint wie erwartet zu funktionieren, nachdem du dieses Problem behoben hast: http://jsfiddle.net/jfriend00/KJBjG/

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