次の2つのステートメントの結果が異なるのはなぜですか?
('0' ? 'a' : 'b') /* -> 'a' */
('0' == true ? 'a' : 'b') /* -> 'b' */
編集:
比較するブール値にキャストされる最初の '0'ステートメントが疑われることを追加する必要があります-これは、「 '0' == true」とまったく同じである必要があります。
まず、完全を期すために:
('0' ? 'a' : 'b')
です'a'
ので、'0'
ある非空でいつもと評価さ文字列は、:true
文字列:引数が空の文字列(長さがゼロ)の場合、結果はfalseです。それ以外の場合、結果はtrueです。
今すぐに'0' == true
。
ここでは2つの型変換が行われます。これは、仕様のセクション11.9.3「抽象的同等性比較アルゴリズム」で説明できます。
オペランドはx
and y
(x == y
)として示されます。
この例でx
は、は文字列('0'
)でy
あり、ブール値(true
)です。したがって、ステップ7が実行されます。
Type(y)がブール値の場合、x == ToNumber(y)の比較結果を返します。
ブール値が数値に変換されると、次の変換が行われます。
ブール値:引数がtrueの場合、結果は1 です。引数がfalseの場合、結果は+0です。
今私たちは持っています
'0' == 1
手順5の条件に一致します。
Type(x)が文字列でType(y)が数値の場合、ToNumber(x)== yの比較結果を返します。
文字列を数値に変換する方法はより複雑ですが、もちろん仕様にも記載されています。
最終的な比較は
0 == 1
これはfalse
(ステップ1. a。vi。)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加