54

私は JavaScript に関する良い本を読んでいました。

それは次のように始まりました:

ブール型は、true と false の 2 つのリテラル値のみを取ります。これらは数値とは異なるため、true は 1 ではなく、false は 0 ではありません。

ただし、次のことを観察しました。

if(1==true)
  document.write("oh!!! that's true");  //**this is displayed**

私は、JavaScript のすべての型に同等のブール値があることを知っています。

しかし、その後、真実は何ですか?

4

9 に答える 9

74

trueJavascript で数値をfalse表さないのは事実です。

一部の言語 (C、VB など) では、ブール値は実際の数値として定義されるため、1 と 0 (または -1 と 0) の名前が異なるだけです。

他のいくつかの言語 (Pascal、C# など) では、数値ではない明確なブール型があります。ブール値と数値の間で変換することは可能ですが、自動的には行われません。

Javascript は明確なブール型を持つカテゴリに分類されますが、一方で Javascript は異なるデータ型間で値を変換することに非常に熱心です。

たとえば、数値はブール値ではありませんが、ブール値が必要な場合は数値を使用できます。を使用if (1) {...}すると、 と同様に機能しif (true) {...}ます。

==あなたの例のように値を比較すると、演算子と演算子の間に違いがあります===。等値演算子は==、一致するものを見つけるために型間を喜んで変換し1 == trueます。型等価演算子は 型変換を行わないため、値が異なる型であるため false と評価されます。true1===1 === true

于 2012-09-02T13:31:47.767 に答える
43

JavaScript では、== は「おそらく等しい」と発音されます。

つまり、JavaScript は自動的にブール値を整数に変換し、2 つの辺を比較しようとします。

実際に等しい場合は、=== 演算子を使用します。

于 2012-09-02T13:22:33.453 に答える
14

厳密な等価比較を試してください:

if(1 === true)
    document.write("oh!!! that's true");  //**this is not displayed**

==演算子は、ある型から別の型への変換を行いますが、演算子===は行いません。

于 2012-09-02T13:21:04.207 に答える
9

ECMAScript 仕様のセクション11.9.3 The Abstract Equality Comparison Algorithmから:

x と y が値である比較 x == y は、true または false を生成します。このような比較は、次のように実行されます。

  • Type(y) が Boolean の場合、比較x == ToNumber(y)の結果を返します。

したがって、 in,if (1 == true)truea に強制変換されますNumber。つまりNumber(true)、 の値になり1、最終的if (1 == 1)に が得られtrueます。

if (0 == false)はまったく同じロジックNumber(false) == 0です。

===代わりに厳密な等号演算子を使用すると、これは発生しません。

11.9.6 厳密等価比較アルゴリズム

比較 x === y (x と y は値) は、true または false を生成します。このような比較は、次のように実行されます。

  • Type(x) が Type(y) と異なる場合は、falseを返します。
于 2012-09-02T14:14:39.197 に答える
3

ああ、恐ろしい緩い比較演算子がまた襲ってきました。絶対に使用しないでください。代わりに常に厳密な比較、=== または !== を使用してください。

おまけの事実:0 == ''

于 2012-09-02T13:21:32.467 に答える
3

何かをブール値と比較すると、次のように機能します

ステップ 1:とに変換booleanするNumber Number(true) // 1Number(false) // 0

ステップ 2: 両面を比較する

boolean == someting 
-> Number(boolean) === someting

と比較する1と、次の結果が得られ2ますtrue

true == 1
-> Number(true) === 1
-> 1 === 1
-> true

true == 2
-> Number(true) === 1
-> 1 === 2
-> false
于 2018-11-03T14:06:58.857 に答える
0

===の代わりに変数を等価にするために使用します==

==変数の値が類似しているかどうか調べます

===変数の値と変数の型が類似しているかどうかをチェックします

方法に注意してください

if(0===false) {
    document.write("oh!!! that's true");
}​

if(0==false) {
    document.write("oh!!! that's true");
}​

異なる結果を与える

于 2012-09-02T13:23:21.813 に答える
-1

== を使用すると、基本的に、変数が false と比較するときに falsey であるか、true と比較するときに trueey であるかを比較します。=== を使用すると、変数の正確な値が比較されるため、true は === 1 になりません。

于 2012-09-02T13:25:55.097 に答える