1. ホーム
  2. ジャバスクリプト

[解決済み】感嘆符が2つ?[重複している]

2022-04-10 08:27:47

質問

<ブロッククオート

重複の可能性があります。

とは何ですか! (not not)演算子とは何ですか?

JavaScriptの!!!演算子(二重感嘆符)の意味を教えてください。

そこで、あるコードをデバッグしていたら、こんなことに出くわしました。

var foo.bar = 0; // this is actually passed from another function, adding it for context

function(foo) {
    var someVar = !!foo.bar;

    if (foo.bar) {
      // ..stuff happens
    } else {
      // .. something else happens
    }
}

さて、そこで質問なのですが !! ? それは 0 === false .

  1. と比較して、それを使うメリットはあるのでしょうか? boolean(foo.bar) ?

  2. foo.barは、そのままifで評価できますので。 0 === false なぜ変換する必要があるのでしょうか?(someVarは他のどこにも再利用されない)

どのように解決するのですか?

これは、値をブーリアンに変換し は、ブーリアン型であることを保証します。 .

"foo"      // Evaluates to "foo".
!"foo"     // Evaluates to false.
!!"foo"    // Evaluates to true.

もし foo.bar が渡された場合、0ではなく、他の偽の値である可能性があります。 次の真理値表を見てください。

javascriptの真理値表

''        ==   '0'           // false
0         ==   ''            // true
0         ==   '0'           // true
false     ==   'false'       // false
false     ==   '0'           // true
false     ==   undefined     // false
false     ==   null          // false
null      ==   undefined     // true
" \t\r\n" ==   0             // true

出典 Doug Crockford

Javascriptは、NaN値に関しても本当に奇妙なことになります。 そして、これは私の頭の中で唯一、「!」と「===」が異なる動作をするケースです。

NaN   ===  NaN     //false
!!NaN === !!NaN    //true

// !!NaN is false