[解決済み] なぜ ('0' ? 'a' : 'b') と ('0' == true ? 'a' : 'b') は挙動が異なるのか [重複] [重複
疑問点
次の2つの文の結果はなぜ違うのですか?
('0' ? 'a' : 'b') /* -> 'a' */
('0' == true ? 'a' : 'b') /* -> 'b' */
編集してください。
私は、'0' の最初のステートメントを比較するためにブーリアンにキャストすることを疑うことを追加する必要があります - これは " '0' == true " とまったく同じであるべきです。 明らかに、これは真実ではありません。
どのように解決するのですか?
まず、念のため。
('0' ? 'a' : 'b')
は
'a'
であるため
'0'
は
a
空でない
と評価される文字列で、常に
true
:
文字列です。結果は false 引数が空の文字列(長さが0)の場合。 それ以外の場合、結果は 真 .
現在
'0' == true
.
ここでは2つの型変換が行われます。これを仕様で追えばいいのです。 セクション 11.9.3, 抽象的な等価比較アルゴリズム .
オペランドは
x
であり
y
(
x == y
).
我々の場合
x
は文字列 (
'0'
) と
y
はブール値(
true
). したがって、ステップ7が実行されます。
Type(y)がBooleanの場合、x == ToNumber(y)の比較結果を返します。
booleanが数値に変換された場合。 を使用すると、次のような変換が行われます。 :
ブール値です。結果は 1 もし引数が 真 . その結果は +0 もし引数が 偽 .
今、私たちは
'0' == 1
で、手順5の条件と一致します。
Type(x)がString、Type(y)がNumberの場合、ToNumber(x) == yの比較結果を返します。
文字列がどのように数値に変換されるかは、より複雑ですが、もちろん、この他にも の仕様です。 .
ということで、最終的な比較は
0 == 1
というのは
false
(ステップ1.a.vi.)
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] 私のJavaScriptコードは "No 'Access-Control-Allow-Origin' header is present on requested resource "というエラーを受け取りますが、Postmanはそうならないのはなぜですか?
-
[解決済み] (a== 1 && a ==2 && a==3) が真に評価されることはあるのでしょうか?
-
[解決済み] JSONPとは何か、なぜ作られたのか?
-
[解決済み] なぜ ++[[]][+[] +[+[]] は "10" という文字列を返すのでしょうか?
-
[解決済み] セレクトボックスのオプションをすべて削除してから、オプションを1つ追加して、jQueryで選択するにはどうすればよいですか?
-
[解決済み] モバイルブラウザの検出
-
[解決済み] CodeMash 2012の'Wat'トークで言及された、この奇妙なJavaScriptの動作の説明とは?
-
[解決済み] Google maps API V3 - 同一地点に複数のマーカーを設置する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】JavaScriptで、「0」はfalseに等しいのに、「if」でテストすると、それだけでfalseにならないのはなぜですか?
-
[解決済み] ジェスト あるクラスの特定のメソッドをモックする方法
-
[解決済み] 配列からオブジェクトを生成する
-
[解決済み] ExtJS 4のイベントハンドリングについて
-
[解決済み] javascriptで2つの数値を連結する方法は?
-
[解決済み] reactのrender関数でdynamic hrefを作成するには?
-
[解決済み] モバイルWeb HTML5フレームワークの選び方【終了しました
-
[解決済み] React js 親コンポーネントから子コンポーネントの状態を変更する
-
[解決済み] JavaScriptのtoString()関数をオーバーライドして、デバッグ用に意味のある出力を提供することは可能でしょうか?
-
[解決済み] 各オブジェクトに?重複