次のコードがJavaScriptでtrueを返す理由を教えてもらえますか?
console.log(true > null); //returns true
null
false
この場合のように、それは0
数としてです。true
数としてです1
。
1
よりも大きい(>
)0
。
それらは数に変換され、null
与え0
、true
与えます1
http://ecma-international.org/ecma-262/5.1/#sec-11.8.5
Type( px)がStringであり、Type(py)がStringである場合ではない場合、
- nxをToNumber (px)を呼び出した結果とします。pxとpy はプリミティブ値であるため、評価の順序は重要ではありません。
- ToNumber ( py )を呼び出した結果をnyとします。
Number(null) //0
Number(true) //1
true = 1
どこにあるのかもしれませんnull = 0
JavaScriptはバックグラウンドで多くの型強制を実行し、表示される結果の多くは役に立ちません(http://wtfjs.com/を参照)。
この場合、1として強制されるtrueは、0に強制されるnullよりも大きくなります。1は0より大きいため、結果はtrueになります。
オペランドの1つがブール値の場合、ブール値のオペランドは、trueの場合は1に変換され、falseの場合は+0に変換されます。
MDNから。
背後で起こっているのは、関係演算子(>
この場合)が比較を行う前に型強制を実行することです。を実行するToPrimitive
と、trueは1に強制変換され、nullは0に強制変換されます。演算子が実際にどのように機能するかについては、ここで詳細を確認できます。
コードが正しくない場合は、次のことを行う必要があります。
console.log(true > typeof null);
比較演算子">"は、左側と右側の両方を強制的に数値に変換します。Number(true)は1、Number(null)は0であるため、paranthesisにあるものは「1> 0」と見なされ、結果として常にtrueになります。