アンダースコアから:
_.isElement = function(obj) {
return !!(obj && obj.nodeType === 1);
};
の目的は何ですか!!
。and ステートメントの結果は常に true または false であると考えていました。
これがブール型に「キャスト」する方法として使用されているのを見てきました。
しかし、ここでは必要ないとは思いません。
アンダースコアから:
_.isElement = function(obj) {
return !!(obj && obj.nodeType === 1);
};
の目的は何ですか!!
。and ステートメントの結果は常に true または false であると考えていました。
これがブール型に「キャスト」する方法として使用されているのを見てきました。
しかし、ここでは必要ないとは思いません。
この!!
トリックは、出力が 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;
obj
が 0、NaN、null、未定義、または空の文字列のいずれかである場合、式は ではなく、それと評価されることに注意してくださいfalse
。明示的なブール変数が返されることを確認する必要がある場合は、キャストする必要があります。