0

より良い解決策は何ですか?

if(typeof bla === "undefined" || bla === null)...

または

if(bla)...

2番目の解決策を実行する場合、未定義かどうかを本当に確認する必要がありますか?

ありがとう。

4

3 に答える 3

3

それは、変数に何が含まれていると予想されるかによって異なります。

たとえば、オブジェクトを含める必要がある場合は、オブジェクト参照が真実であるため、2 番目のオプションが適切に機能します。

たとえば、ブール値を含める必要がある場合、2 番目のオプションはまったく機能しません。これは、false存在しない値と同じ結果が得られるためです。

于 2013-06-25T12:23:16.433 に答える
0

本当に未定義かどうかを確認する必要がありますか?

いいえ、undefined と null の両方が false に解決されます。2番目のオプションは間違いなく優れています。

于 2013-06-25T12:22:28.997 に答える
0

「未定義かどうかを確認する」には、通常、最善の解決策は 3 番目の解決策です。

デモ

function isDef(obj) {
    var undefined;
    return obj === undefined;
}

これは、時間を失うことなくオブジェクトが未定義であるかどうかをチェックし、このテストは、、または2 番目のテストのtypeofように true として検証されません。""nullNaN0

唯一の落とし穴は、誰かがグローバルundefinedオブジェクトをオーバーライドできることです。ES5 の厳密モードでは不可能ですが、コードでこれを防ぐ必要があります。undefinedローカル定義によるシャドウイングvar undefined;がそれを行います。

また、isDef関数を使用することで、より優れたポータブルなミニフィケーションとよりシンプルなロジックを実現できます。

if (isDef(x)) {
    // do something
} else {
    // do something else
};
于 2013-06-25T12:22:48.680 に答える