12

次のコードがJavaScriptでtrueを返す理由を教えてもらえますか?

console.log(true > null); //returns true
4

7 に答える 7

13

nullfalseこの場合のように、それは0数としてです。true数としてです1

1よりも大きい(>0

于 2012-07-23T14:44:21.013 に答える
7

それらは数に変換され、null与え0true与えます1

http://ecma-international.org/ecma-262/5.1/#sec-11.8.5

Type( px)がStringであり、Type(py)がStringである場合ではない場合、

  1. nxをToNumber (px)を呼び出した結果とします。pxpy はプリミティブ値であるため、評価の順序は重要ではありません。
  2. ToNumber ( py )を呼び出した結果をnyとします。
Number(null) //0
Number(true) //1
于 2012-07-23T14:44:51.067 に答える
2

true = 1どこにあるのかもしれませんnull = 0

于 2012-07-23T14:44:41.417 に答える
2

JavaScriptはバックグラウンドで多くの型強制を実行し、表示される結果の多くは役に立ちません(http://wtfjs.com/を参照)。

この場合、1として強制されるtrueは、0に強制されるnullよりも大きくなります。1は0より大きいため、結果はtrueになります。

オペランドの1つがブール値の場合、ブール値のオペランドは、trueの場合は1に変換され、falseの場合は+0に変換されます。

MDNから。

于 2012-07-23T14:45:54.383 に答える
1

背後で起こっているのは、関係演算子(>この場合)が比較を行う前に型強制を実行することです。を実行するToPrimitiveと、trueは1に強制変換され、nullは0に強制変換されます。演算子が実際にどのように機能するかについては、ここで詳細を確認できます。

于 2012-07-23T14:49:15.690 に答える
0

コードが正しくない場合は、次のことを行う必要があります。

console.log(true > typeof null);
于 2012-07-23T14:45:35.013 に答える
0

比較演算子">"は、左側と右側の両方を強制的に数値に変換します。Number(true)は1、Number(null)は0であるため、paranthesisにあるものは「1> 0」と見なされ、結果として常にtrueになります。

于 2012-07-23T14:48:52.163 に答える