私がJavaScriptで知っている限り!ブール値を正規化して、他の型からtrueまたはfalseに変換します。これは、 "0"がブール値trueに変換されることを意味します。一方、私がそれを偽と比較すると、それは実際には偽であることが分かります(比較結果は真です)。私はここで何のルールを欠いているのですか?私はIEとOperaでそれをテストしました。JavaScriptでアラート(!! "0")とアラート(false == "0")が両方とも出力されるのはなぜですか?
答えて
演算子==
は、真実性とは関係ない緩やかな平等をチェックします。
具体的には、オペランドを数値に変換して数値を比較します。
数値を含む文字列は、数値に含まれる文字列に変換されます。ブール値は0
と1
に変換されます。
オブジェクトは、定義されている場合はvalueOf
を呼び出して変換されます。
したがって、以下のすべてが真である:
"1" == 1
"0" == false
"1" == true
"2" != true
"2" != false
({ valueOf:function() { return 2; } }) == 2
最初の発現のため
({ valueOf:function() { return 1; } }) == true
確かに、または要約すると、 "このくそは駄目です" – Claudiu
最初のケースでは、空でない文字列はtrueと同じです。
第2のケースでは、1つのオペランドがブール値であるため、両方のオペランドが数値に変換されます。私はfalse
が数値0
に変換され、文字列"0"
も数字0
に変換され、結果として0 == 0
が真であると信じています。
Mozilla referenceを確認してください。
私の答えのコメントをありがとう、それは多くの意味があります。いいキャッチ!あなたのために+1、良い先生。 – wsanville
、ECMA-262のセクション9.2は、内部論理NOT演算子によって使用される抽象操作ToBooleanを定義します。それは言う:
文字列
引数が空の文字列(長さがゼロである)である場合、結果はfalseです。そうでない場合、結果は真です。
JavaScriptは、異なるデータ型のこれらの値を比較しようとすると型強制を実行します。ダグラス・クロフォードは、this is a misfeatureと言っています。 ==
の代わりに===
を使用した場合は間違いです。ルールはかなり複雑ですので、詳細はECMA-262の11.9.3節を直接参照してください。
- 1. 式(0 == 0&1 == 1)がFalseに評価されるのはなぜですか?
- 2. JavaScriptで「0 === -0」がtrueになるのはなぜですか?
- 3. なぜ0 == CGFLOAT_MINはfalseですか?
- 4. なぜこのプログラムの出力は2と0ですか?
- 5. なぜコンバイナ出力レコード= 0ですか?
- 6. なぜアラートがJavascriptで機能しないのですか
- 7. Java Selenium - ChromeとFirefoxの両方でアラートにアクセスできない
- 8. なぜ!(0 || 1 || 0)は0ですか?
- 9. なぜ0が出力されますか?
- 10. ブートストラップのアラートが閉じられるのはなぜですか?
- 11. Javascriptアラートを入力することはできません
- 12. String.prototype.slice()では、.slice(0、-0)と.slice(0、+ 0)は同じ結果を出力する必要がありますか?
- 13. ルビで1 && 0が0のときに0 && 1が1になるのはなぜですか?
- 14. -0 === 0が本当に評価されるのはなぜですか?
- 15. アラートに表示される値が選択ボックスに反映されないのはなぜですか? (Javascript/jQuery)
- 16. アラートがポップアップしようとすると、スレッド1:EXC_BREAKPOINTが表示されるのはなぜですか?
- 17. JavascriptでNumber([])=== 0とNumber({})=== NaNはなぜですか?
- 18. アプリは通知センターでアラートとバナーの両方を使用できますか?
- 19. なぜこの出力が0%ですか?
- 20. リダイレクトの前にアラートが表示されるのはなぜですか?
- 21. 数字が0 0 0まで入力されています
- 22. アラートの前に要素が表示されないのはなぜですか?
- 23. (2/3)がレールで0と評価されるのはなぜですか?
- 24. 「return 0」を使用しないと「Process returned 18(0 * 12)」と表示されるのはなぜですか?
- 25. neo4jでクエリが0、0を返すのはなぜですか?
- 26. 私のJavaScriptの計算機では、出力が0になるのはなぜですか?
- 27. sh:[$ COUNT == 0]]と[$ COUNT == 0]の両方からのエラー
- 28. なぜASPクラシックのSelect Caseブランチでjavascriptアラートがポップアップしないのですか?
- 29. Javascript(Sharepoint 2007)アラート
- 30. JavaScriptが「0」を記録するのはなぜですか?
[Boolan(!x)とBoolean(x == 0)の違い?](http://stackoverflow.com/questions/4280344/difference-between-boolanx-and-booleanx-0/4280356) #4280356) – SLaks