1. ホーム
  2. javascript

[解決済み] javascriptの二重否定(!) - 目的は何ですか?[重複しています]。

2022-04-26 08:54:52

質問

<ブロッククオート

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

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

私はこのようなコードに遭遇しました。

function printStackTrace(options) {
    options = options || {guess: true};
    var ex = options.e || null, guess = !!options.guess;
    var p = new printStackTrace.implementation(), result = p.run(ex);
    return (guess) ? p.guessAnonymousFunctions(result) : result;
}

そして、なぜ二重否定なのか、不思議でなりませんでした。また、同じ効果を得るための別の方法はないのでしょうか?

(コードは https://github.com/eriwen/javascript-stacktrace/blob/master/stacktrace.js )

解決方法は?

ブーリアン型にキャストする。最初の ! はそれを一度否定し、このように値を変換します。

  • undefinedtrue
  • null から true
  • +0 から true
  • -0 から true
  • '' から true
  • NaN から true
  • false から true
  • 他のすべての表現から false

次に、他の ! はそれを再び否定する。booleanへの簡潔なキャストで、まさに以下と同等です。 ブール値へ という理由だけで ! はその否定として定義される . しかし、ここでは条件演算子の条件として使われるだけで、同じように真偽判定を行うので不要です。