wake-up-neo.com

ES2015 / 2016 Art von "typeof varName ===" undefined "?

Ich wälze mich gerade in ES2015 + Luxus mit ein paar Projekten und frage mich, ob ich die verhasste Krücke loswerden kann, um im neuen Wunderland nach undefined zu suchen.

Gibt es einen kürzeren, aber dennoch genauen Weg zu typeof varName === 'undefined' in ES2015 + schon?

Natürlich könnte ich Standardparameter verwenden, aber das fühlt sich auch nach einer unnötigen Zuweisung an.

function coolFn(a = null){
   if (a===null) console.log("no a supplied");
}
50
Hedge

Überprüfen Sie einfach für varName === undefined.

In älteren Browsern war es möglich, der globalen Variablen undefined einen alternativen Wert zuzuweisen, wodurch dieser Test fehlschlug. In ES2015 + ist dies jedoch jetzt nicht mehr möglich.

Beachten Sie, dass es keine Möglichkeit gibt, die explizite Übergabe von undefined als Parameter von der Auslassung des Parameters zu unterscheiden, es sei denn, Sie betrachten arguments.length.

71
Alnitak

Der einzige Fall, in dem typeof varName === 'undefined' Nützlich ist, ist, wenn Sie nicht wissen, ob die Variable varName deklariert wurde.

Und IMO, wenn Sie nicht wissen, ob Ihre Variablen deklariert sind, hat Ihr Code ernsthafte Probleme.

In anderen Fällen haben Sie bessere Möglichkeiten:

  • varName === void 0

    Dies erkennt, ob varName undefiniert ist.

    void ist ein Operator, der ein Argument empfängt (Sie können anstelle von 0 alles verwenden) und undefiniert zurückgibt.

  • varName === undefined

    Dies sollte erkennen, ob varName undefiniert ist.

    Beachten Sie jedoch, dass das globale undefined möglicherweise (vor ES5) überschrieben oder mit einem anderen Wert beschattet wurde. Daher bevorzuge ich void, was auch kürzer ist.

  • varName == null

    Dadurch wird festgestellt, ob varName undefiniert oder null ist.

  • !varName

    Dadurch wird erkannt, ob varName falsch ist (undefiniert, null, 0, leere Zeichenfolge, NaN, falsch).

22
Oriol