4

アンダースコアから:

  _.isElement = function(obj) {
    return !!(obj && obj.nodeType === 1);
  };

の目的は何ですか!!。and ステートメントの結果は常に true または false であると考えていました。

これがブール型に「キャスト」する方法として使用されているのを見てきました。

しかし、ここでは必要ないとは思いません。

4

2 に答える 2

6

この!!トリックは、出力が trueまたはfalse であることを保証します。

obj が false-y 値 ("" または 0 など) に評価されると、式のobj && ..結果は obj の値になります。

場合によっては、入力オブジェクトが結果に関係なく、この「キャスト」(キャストではなく強制) によって API がクリーンアップされ、詳細の漏洩が回避されます。true または falseのみが返されることが保証されます。

の TTL は次のとおりです。結果は必ずしもtrue または falseではないa && bことに注意してください。

a         b        a && b
-------   ------   ------
TRUTH-y   ANY      b
FALSE-Y   ANY      a

の TTL は次の!eとおりです。結果は常に true または false です。

e         !e       !!e
-------   ------   ------
TRUTH-y   false    true
FALSE-y   true     false

私が実際に頻繁に使用する元の表現を表現する別の方法:

return obj ? obj.nodeType === 1 : false;
于 2013-05-03T19:06:41.883 に答える
3

objが 0、NaN、null、未定義、または空の文字列のいずれかである場合、式は ではなく、それと評価されることに注意してくださいfalse。明示的なブール変数が返されることを確認する必要がある場合は、キャストする必要があります。

于 2013-05-03T19:05:34.143 に答える