JavaScript の if ステートメントで条件がブール値にラップされるというのは本当ですか?
if(x) => if(Boolean(x))
比較では JavaScript が比較要素を数値にラップするというのは本当ですか?
a == b => Number(a) == Number(b)
JavaScript の if ステートメントで条件がブール値にラップされるというのは本当ですか?
if(x) => if(Boolean(x))
比較では JavaScript が比較要素を数値にラップするというのは本当ですか?
a == b => Number(a) == Number(b)
はいといいえ。
最初の部分については、はい、それは基本的に JavaScript が行うことです。
しかし、後者については、いいえ。JavaScript のすべてを数値に変換できるわけではありません。例えば:
Number('abc') // => NaN
そして、Not-A-Numbers は等しくありません:
NaN == NaN // => false
だから、このようなもの:
Number('abc') == Number('abc') // => false!
しかし、それは等価比較では実際に当てはまります。
'abc' == 'abc' // => true
補足として、 JavaScript で使用することをお===
勧めします。これは、比較される値の型もチェックします。
0 == '0' // => true
0 === '0' // => false, because integer is not a string
詳細について===
は、こちらを参照してください。
はい、そうです、x
この状況ではブール値のコンテキストで評価されるため、 と同等のものBoolean(x)
が適用されます。
いいえ、そうではありません。強制等価演算子 が を同じ型==
に変換しようとするa
ため、そのように見えるだけです。またはがすでに である場合にのみ適用されます。例えば:b
Number()
a
b
Number
>>> 0x2A == 42
true // both 'a' and 'b' are numbers.
>>> "0x2A" == 42
true // 'a' is a string whose number coercion is equal to 'b'.
>>> "0x2A" == "42"
false // 'a' and 'b' are different strings.
JavaScript の if ステートメントで条件がブール値にラップされるというのは本当ですか?
通常はい。
比較では JavaScript が比較要素を数値にラップするというのは本当ですか?
絶対にありません。
このif
声明は、§ 12.5で次のように定義されています。
if ( 式 ) ステートメント else ステートメント
Expressionが評価され、変換され、変換GetValue()
後にテストされることを示していToBoolean()
ます。
次に、最初のアサーションは true です(ただし、後で参照してください)。if
ステートメントの条件は、パラメーターとして関数に渡されるように評価されますBoolean
。JavaScript がブール値への型変換を処理する方法を思い出してください ( § 9.2 ):
undefined
null
値は に変換されますfalse
。false
±0 の場合は に変換され、NaN
それ以外の場合は に変換されtrue
ます。false
文字列は空の場合に変換されます。それ以外の場合はtrue
、その内容に関係なく常にに変換されます。true
ます。GetValue()
厳密に言えば、このアサーションは常に真であるとは限りません。§ 8.7.1を参照してください。ここでは、標準がどのように機能するかを説明してGetValue()
いますToBoolean()
。
==
演算子は§ 11.9.3のように定義されています。
ご覧のとおり、オペランドが数値でなければならない (または数値として扱われる) ことを指定していないため、演算子の動作は異なり、オペランドの型に基づく一連の規則によって規制されます。次に、2 番目のアサーションは falseです。それらが数値である場合 (またはそれらの 1 つが数値である場合) は、アルゴリズムの特殊なケースにすぎません。アルゴリズムのポイント 4 で、それらの 1 つが数値で、もう 1 つが文字列である場合に注意してください。次にToNumber()
、この場合にのみ (この変換が持つすべての意味を持つ) で変換されます。
関数、文字列、または数値を比較できると考えると直感的です。すべての型を数値に変換できるわけではありません。