0
  1. if(a)がjavascriptを正確にチェックインする場合はどうなりますか?未定義をチェックできますか?nullをチェックできますか?空の文字列をチェックできますか?
  2. typeof a =='undefined'を使用する必要があるのはいつですか、それともif(a)でカバーできますか?
4

6 に答える 6

4

ifブール コンテキストで評価aし、結果を使用して実行するコード ブランチを決定します。undefinednullおよび空の文字列はすべてfalse、ブール コンテキストで評価されます。

typeof a === "undefined"名前が定義されているかどうかを確認するのに役立ちaます (たとえば、その名前の変数が現在のスコープに存在するかどうか)。この構成体がないと、直接アクセスaすると、定義されていない場合に例外がスローされます。

于 2012-12-27T08:53:30.550 に答える
4

ECMAscript 言語仕様から引用すると、if ステートメントは次のように機能します。

12.5 if ステートメント

本番の IfStatement : if ( Expression ) ステートメントは次のように評価されます。

  1. exprRefをExpressionの評価結果とします。
  2. ToBoolean (GetValue(exprRef))が false の場合、(normal、empty、empty) を返します。
  3. Statement を評価した結果を返します。

つまり、そのような場合、次のtoBooleanような変換を試みます。

表 11 - ToBoolean 変換

未定義: false
Null: false
Boolean: 結果は入力引数と同じです (変換なし)。
Number:引数が+0-0、またはNaNの場合、結果はfalseです。それ以外の場合、結果はtrueです。文字列:引数が空の文字列 (長さがゼロ) の場合、 結果はfalseです。それ以外の場合、結果はtrueです。 オブジェクト:

于 2012-12-27T08:54:17.523 に答える
1

値が false-ish でないこと、つまりfalse0undefinedおよびnullまたは空の文字列をチェックします。偽っぽい値を区別できないためtypeof a == 'undefined'、値が未定義かどうかに興味がある場合に便利です。if (a)

于 2012-12-27T08:50:47.973 に答える
0

条件ステートメントは、'true' または 'false' のみをチェックします。未定義の場合は条件が満たされないため、制御はループに入りません。

typeof はオペランドの型を返します。詳細については、このリンクを参照してください

于 2012-12-27T08:53:38.833 に答える
0

次の値は、JavaScript 条件で false と見なされます: false、null、undefined、''、0、NaN

于 2012-12-27T08:55:31.070 に答える
0

h2co3 による答えは実際にはほぼ正しいです。スクリプト エラーが発生するため、typeof がないと if で未定義の変数をチェックすることはできません。

これを行う場合:

<script>
if (a) alert('hello');
</script>

スクリプト エラーが発生し、if は評価されません (アラートが表示されないという意味では結果は同じですが、それはスクリプト エラーによりスレッドの実行が終了したためです)。

a が定義されていることを確認したい場合は、typeof テストを使用する必要があります。

于 2012-12-27T09:03:32.343 に答える