1. ホーム
  2. javascript

[解決済み] トリプルエクスクラメーションマークの使用

2023-07-02 19:51:37

質問

あるプロジェクトのソースコードを見ていたら、条件文の中で感嘆符を3つ使っている箇所がいくつかありました。

if (!!!someVar) {
    // ...
}

さて、これはめったに使われない演算子というわけではなく、3つの否定を並べただけのものであることは理解しています。 !(!(!someVar))) . 私の考えでは、これは感嘆符1つで置き換えるのが安全だと思います。以下は、以下のようなケースを見つけようとしたものです。 !!!a と等しくない場合を探してみました。 !a (となっています(google chrome consoleからそのまま引用)。

var a = ''
""
!!!a === !a
true
a = 'string'
"string"
!!!a === !a
true
a = null
null
!!!a === !a
true
a = 12
12
!!!a === !a
true
a = {b: 1}
Object {b: 1}
!!!a.c === !a.c // a.c is undefined here
true
a = []
[]
!!!a === !a
true
a = [1,2]
[1, 2]
!!!a === !a
true

私は何か珍しい(あるいは明白な)ケースを見逃しているのでしょうか?

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

の間に違いはありません。 !a!!!a であることから !!!a は単に !!(!a) で、なぜなら !a はブーリアンである。 !!(!a) はその二重否定に過ぎず、したがって同じである。