仕様による。
12.5 ifステートメント
.....
2. ToBoolean(GetValue(exprRef))がtrueの場合、
a。最初のステートメントの評価結果を返します。
3.それ以外の場合
....
仕様によると、ToBooleanは
抽象演算ToBooleanは、表11に従って、その引数をBoolean型の値に変換します。
そしてその表は文字列についてこれを述べています:
引数が空の文字列(長さがゼロ)の場合、結果はfalseです。そうでなければ結果は真です
ここで、なぜ"0" == false
抽象演算子から値を取得する等値演算子を読み取る必要があるのかを説明するGetValue(lref)
ために、右側と同じように一致します。
これは、この関連部分を次のように説明しています。
IsPropertyReference(V)の場合、
a。HasPrimitiveBase(V)がfalseの場合、getをbaseの[[Get]]内部メソッドとし、それ以外の場合はgetとします。
以下で定義される特別な[[Get]]内部メソッドである。
b。この値としてbaseを使用してget内部メソッドを呼び出し、渡した結果を返します
引数のGetReferencedName(V)
または、言い換えると、文字列にはプリミティブベースがあり、内部のgetメソッドをコールバックして最終的にfalseに見えます。
GetValueオペレーションを使用して物事を==
評価したい場合はuse 、を使用して評価したい場合はToBoolean
、use ===
(「厳密な」等価演算子とも呼ばれます)
"0"
文字列であり、空ではないため、trueと評価されます。