( '0'? 'a': 'b')の動作が( '0' == true? 'a': 'b')と異なるのはなぜですか

迷走者:

次の2つのステートメントの結果が異なるのはなぜですか?

('0' ? 'a' : 'b') /* -> 'a' */
('0' == true ? 'a' : 'b') /* -> 'b' */

jsFiddleテストケース

編集:

比較するブール値にキャストされる最初の '0'ステートメントが疑われることを追加する必要があります-これは、「 '0' == true」とまったく同じである必要があります。

フェリックスクリング:

まず、完全を期すために:

('0' ? 'a' : 'b') 

です'a'ので、'0'ある非空でいつもと評価さ文字列は、true

文字列:引数が空の文字列(長さがゼロ)の場合、結果はfalseです。それ以外の場合、結果はtrueです。


今すぐに'0' == true

ここでは2つの型変換が行われます。これは、仕様のセクション11.9.3「抽象的同等性比較アルゴリズム」で説明できます。

オペランドはxand yx == yとして示されます

この例でxは、は文字列('0')でyあり、ブール値(true)です。したがって、ステップ7が実行されます。

Type(y)がブール値の場合、x == ToNumber(y)の比較結果を返します。

ブール値が数値に変換されると、次の変換が行われます。

ブール値:引数がtrueの場合、結果は1 です引数がfalseの場合、結果は+0です

今私たちは持っています

'0' == 1

手順5の条件に一致します。

Type(x)が文字列でType(y)が数値の場合、ToNumber(x)== yの比較結果を返します。

文字列を数値に変換する方法はより複雑ですが、もちろん仕様にも記載されています

最終的な比較は

0 == 1

これはfalse(ステップ1. a。vi。)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

mallocが「b」と「b [0]」に異なるアドレスを与えるのはなぜですか?

分類Dev

Javaで(a * b!= 0)が(a!= 0 && b!= 0)より速いのはなぜですか?

分類Dev

0がto_char(0、 'B9999')の例外であるのはなぜですか?

分類Dev

「bytes(4)のbのbの0、0、0、0」の0は何ですか

分類Dev

if(a-b <0)とif(a <b)の違い

分類Dev

c ++の "int a、b = 0;" int a = 0; int b = 0 "の違いは何ですか?

分類Dev

ord関数の使用(ord(B [0])-ord( '0'))

分類Dev

Q:Python 3:バイト配列要素の比較b'ABC '[0] == b'A'がFalseに等しいのはなぜですか?

分類Dev

a / b、ただしb == 0の場合は0を返します

分類Dev

a =(b ++)がa = b ++と同じ動作をするのはなぜですか?

分類Dev

`view.scope_name(view.sel()[0] .b)`が同じドキュメントで異なるのはなぜですか?

分類Dev

Python 2で ''> 0がTrueになるのはなぜですか?

分類Dev

なぜ「a ^ = b ^ = a ^ = b;」なのか 「a ^ = b; b ^ = a; a ^ = b;」とは異なりますか?

分類Dev

浮動小数点:a> bの場合、a / b-1> 0です

分類Dev

floor(a /(double)b)* b == a if a%b == 0 in C?

分類Dev

(A + B)のFFTがFFT(A)+ FFT(B)と異なるのはなぜですか?

分類Dev

!0が真である場合、なぜ「true &&!0」は!0ではなくtrueを返すのでしょうか。

分類Dev

Javaでは、abが両方とも整数の場合、ab>0とa>bが異なる可能性はありますか?

分類Dev

プログラムを実行するたびに、これが異なる値を返すのはなぜですか?0x3759F8B0-0x100

分類Dev

print( 'a'> 'b')Falseおよびprint( 'a'> 'A')Trueなのはなぜですか?

分類Dev

(a%256)が(a&0xFF)と異なるのはなぜですか?

分類Dev

(1 in [1,0] == True)がFalseと評価されるのはなぜですか?

分類Dev

Bash:[[zero -eq 0]]がtrueと評価されるのはなぜですか?

分類Dev

'0b10101000'などのバイナリリテラルで先頭の0が必要なのはなぜですか?

分類Dev

外付けHFS +ハードドライブに多くのファイルが0Bとして表示されるのはなぜですか?

分類Dev

Coqエラー:「true」を「is_true(0 <a --b-3)」と統合できません

分類Dev

この算術式の意味:A + = B ++ == 0 in C ++;

分類Dev

MySQLと同等のMongoDB:select count(*)c、sum(if(x = 'A'、1,0))as a、sum(if(x = 'B'、1,0))as b

分類Dev

MySQLと同等のMongoDB:select count(*)c、sum(if(x = 'A'、1,0))as a、sum(if(x = 'B'、1,0))as b

Related 関連記事

  1. 1

    mallocが「b」と「b [0]」に異なるアドレスを与えるのはなぜですか?

  2. 2

    Javaで(a * b!= 0)が(a!= 0 && b!= 0)より速いのはなぜですか?

  3. 3

    0がto_char(0、 'B9999')の例外であるのはなぜですか?

  4. 4

    「bytes(4)のbのbの0、0、0、0」の0は何ですか

  5. 5

    if(a-b <0)とif(a <b)の違い

  6. 6

    c ++の "int a、b = 0;" int a = 0; int b = 0 "の違いは何ですか?

  7. 7

    ord関数の使用(ord(B [0])-ord( '0'))

  8. 8

    Q:Python 3:バイト配列要素の比較b'ABC '[0] == b'A'がFalseに等しいのはなぜですか?

  9. 9

    a / b、ただしb == 0の場合は0を返します

  10. 10

    a =(b ++)がa = b ++と同じ動作をするのはなぜですか?

  11. 11

    `view.scope_name(view.sel()[0] .b)`が同じドキュメントで異なるのはなぜですか?

  12. 12

    Python 2で ''> 0がTrueになるのはなぜですか?

  13. 13

    なぜ「a ^ = b ^ = a ^ = b;」なのか 「a ^ = b; b ^ = a; a ^ = b;」とは異なりますか?

  14. 14

    浮動小数点:a> bの場合、a / b-1> 0です

  15. 15

    floor(a /(double)b)* b == a if a%b == 0 in C?

  16. 16

    (A + B)のFFTがFFT(A)+ FFT(B)と異なるのはなぜですか?

  17. 17

    !0が真である場合、なぜ「true &&!0」は!0ではなくtrueを返すのでしょうか。

  18. 18

    Javaでは、abが両方とも整数の場合、ab>0とa>bが異なる可能性はありますか?

  19. 19

    プログラムを実行するたびに、これが異なる値を返すのはなぜですか?0x3759F8B0-0x100

  20. 20

    print( 'a'> 'b')Falseおよびprint( 'a'> 'A')Trueなのはなぜですか?

  21. 21

    (a%256)が(a&0xFF)と異なるのはなぜですか?

  22. 22

    (1 in [1,0] == True)がFalseと評価されるのはなぜですか?

  23. 23

    Bash:[[zero -eq 0]]がtrueと評価されるのはなぜですか?

  24. 24

    '0b10101000'などのバイナリリテラルで先頭の0が必要なのはなぜですか?

  25. 25

    外付けHFS +ハードドライブに多くのファイルが0Bとして表示されるのはなぜですか?

  26. 26

    Coqエラー:「true」を「is_true(0 <a --b-3)」と統合できません

  27. 27

    この算術式の意味:A + = B ++ == 0 in C ++;

  28. 28

    MySQLと同等のMongoDB:select count(*)c、sum(if(x = 'A'、1,0))as a、sum(if(x = 'B'、1,0))as b

  29. 29

    MySQLと同等のMongoDB:select count(*)c、sum(if(x = 'A'、1,0))as a、sum(if(x = 'B'、1,0))as b

ホットタグ

アーカイブ