- if(a)がjavascriptを正確にチェックインする場合はどうなりますか?未定義をチェックできますか?nullをチェックできますか?空の文字列をチェックできますか?
- typeof a =='undefined'を使用する必要があるのはいつですか、それともif(a)でカバーできますか?
6 に答える
if
ブール コンテキストで評価a
し、結果を使用して実行するコード ブランチを決定します。undefined
、null
および空の文字列はすべてfalse
、ブール コンテキストで評価されます。
typeof a === "undefined"
名前が定義されているかどうかを確認するのに役立ちa
ます (たとえば、その名前の変数が現在のスコープに存在するかどうか)。この構成体がないと、直接アクセスa
すると、定義されていない場合に例外がスローされます。
ECMAscript 言語仕様から引用すると、if ステートメントは次のように機能します。
12.5 if ステートメント
本番の IfStatement : if ( Expression ) ステートメントは次のように評価されます。
- exprRefをExpressionの評価結果とします。
- ToBoolean (GetValue(exprRef))が false の場合、(normal、empty、empty) を返します。
- Statement を評価した結果を返します。
つまり、そのような場合、次のtoBoolean
ような変換を試みます。
表 11 - ToBoolean 変換
未定義: false
Null: false
Boolean: 結果は入力引数と同じです (変換なし)。
Number:引数が+0、-0、またはNaNの場合、結果はfalseです。それ以外の場合、結果はtrueです。文字列:引数が空の文字列 (長さがゼロ) の場合、 結果はfalseです。それ以外の場合、結果はtrueです。 オブジェクト:真
値が false-ish でないこと、つまりfalse
、0
、undefined
およびnull
または空の文字列をチェックします。偽っぽい値を区別できないためtypeof a == 'undefined'
、値が未定義かどうかに興味がある場合に便利です。if (a)
条件ステートメントは、'true' または 'false' のみをチェックします。未定義の場合は条件が満たされないため、制御はループに入りません。
typeof はオペランドの型を返します。詳細については、このリンクを参照してください
次の値は、JavaScript 条件で false と見なされます: false、null、undefined、''、0、NaN
h2co3 による答えは実際にはほぼ正しいです。スクリプト エラーが発生するため、typeof がないと if で未定義の変数をチェックすることはできません。
これを行う場合:
<script>
if (a) alert('hello');
</script>
スクリプト エラーが発生し、if は評価されません (アラートが表示されないという意味では結果は同じですが、それはスクリプト エラーによりスレッドの実行が終了したためです)。
a が定義されていることを確認したい場合は、typeof テストを使用する必要があります。