web-dev-qa-db-ja.com

「typeof varName === 'undefined`のES2015 / 2016の方法?

私は今、ES2015 +の贅沢にいくつかのプロジェクトを抱えており、新しいワンダーランドでundefinedをチェックするために非常に嫌われている松葉杖を取り除くことができるかどうか疑問に思っています。

ES2015 +のtypeof varName === 'undefined'へのより短い、しかしまだ正確な方法はすでにありますか?

もちろん デフォルトのパラメーター を使用できますが、これも不必要な割り当てのように感じます。

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

varName === undefinedを確認するだけです。

古いブラウザーでは、グローバルundefined変数に代替値を割り当てることができましたが、そのテストは失敗しましたが、ES2015 +では不可能になりました。

パラメーターとしてundefinedを明示的に渡すことと、arguments.lengthを見る以外にパラメーターを完全に除外することを区別する方法がないことに注意してください。

71
Alnitak

typeof varName === 'undefined'が役立つのは、変数varNameが宣言されているかどうかわからない場合だけです。

IMOでは、変数が宣言されているかどうかわからない場合、コードに重大な問題があります。

他の場合には、より良いオプションがあります:

  • varName === void 0

    これは、varNameが未定義かどうかを検出します。

    voidは、引数を受け取り(0の代わりに何でも使用できます)、未定義を返す演算子です。

  • varName === undefined

    これはshouldvarNameが未定義かどうかを検出します。

    ただし、グローバルundefinedが(ES5より前に)上書きされたり、別の値でシャドウされたりする可能性があることに注意してください。したがって、voidの方が好きです。これも短いです。

  • varName == null

    これにより、varNameが未定義かnullかが検出されます。

  • !varName

    これは、varNameが偽(未定義、null、0、空文字列、NaN、false)であるかどうかを検出します。

22
Oriol