3

JavaScript の if ステートメントで条件がブール値にラップされるというのは本当ですか?

if(x) => if(Boolean(x))

比較では JavaScript が比較要素を数値にラップするというのは本当ですか?

a == b => Number(a) == Number(b)
4

3 に答える 3

3

はいといいえ。

最初の部分については、はい、それは基本的に 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

詳細について===は、こちらを参照してください

于 2012-05-08T07:47:28.277 に答える
1
  1. はい、そうです、xこの状況ではブール値のコンテキストで評価されるため、 と同等のものBoolean(x)が適用されます。

  2. いいえ、そうではありません。強制等価演算子 が を同じ型==に変換しようとするaため、そのように見えるだけです。またはがすでに である場合にのみ適用されます。例えば:bNumber()abNumber


>>> 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.
于 2012-05-08T07:49:20.080 に答える
1

JavaScript の if ステートメントで条件がブール値にラップされるというのは本当ですか?

通常はい。

比較では JavaScript が比較要素を数値にラップするというのは本当ですか?

絶対にありません。

説明

JavaScript 言語仕様から。

このif声明は、§ 12.5で次のように定義されています。

if ( 式 ) ステートメント else ステートメント

Expressionが評価され、変換され、変換GetValue()後にテストされることを示していToBoolean()ます。

次に、最初のアサーションは true です(ただし、後で参照してください)。ifステートメントの条件は、パラメーターとして関数に渡されるように評価されますBoolean。JavaScript がブール値への型変換を処理する方法を思い出してください ( § 9.2 ):

  • undefinednull値は に変換されますfalse
  • 数値はfalse±0 の場合は に変換され、NaNそれ以外の場合は に変換されtrueます。
  • false文字列は空の場合に変換されます。それ以外の場合はtrue、その内容に関係なく常にに変換されます。
  • オブジェクトは常に に変換されtrueます。

GetValue()厳密に言えば、このアサーションは常に真であるとは限りません。§ 8.7.1を参照してください。ここでは、標準がどのように機能するかを説明してGetValue()ますToBoolean()

==演算子は§ 11.9.3のように定義されています。
ご覧のとおり、オペランドが数値でなければならない (または数値として扱われる) ことを指定していないため、演算子の動作は異なり、オペランドの型に基づく一連の規則によって規制されます。次に、2 番目のアサーションは falseです。それらが数値である場合 (またはそれらの 1 つが数値である場合) は、アルゴリズムの特殊なケースにすぎません。アルゴリズムのポイント 4 で、それらの 1 つが数値で、もう 1 つが文字列である場合に注意してください。次にToNumber()、この場合にのみ (この変換が持つすべての意味を持つ) で変換されます。

関数、文字列、または数値を比較できると考えると直感的です。すべての型を数値に変換できるわけではありません。

于 2012-05-08T08:08:35.397 に答える