来自underscore:
_.isElement = function(obj) {
return !!(obj && obj.nodeType === 1);
};
!!
的目的是什么?它认为声明的结果总是正确或错误。
我已经看到这种方式被用作"演员"到布尔类型。
但我不认为这里没有必要。
答案 0 :(得分:6)
!!
技巧确保输出为真或 false。
当obj求值为false-y值(例如“”或0)时,表达式obj && ..
将导致obj的值。
有时输入对象与结果无关,而且这种“强制转换”(它根本不是强制转换,而是强制转换)可以清除API并避免泄漏细节 - 可以确保仅 返回true或false。
以下是a && b
的TTL,请注意结果不一定是真还是假:
a b a && b
------- ------ ------
TRUTH-y ANY b
FALSE-Y ANY a
以下是!e
的TTL,结果始终为true或false:
e !e !!e
------- ------ ------
TRUTH-y false true
FALSE-y true false
表达原始表达式的另一种方法,我经常使用它:
return obj ? obj.nodeType === 1 : false;
答案 1 :(得分:3)
请注意,如果obj
为0,NaN,null,undefined或空字符串,则表达式将评估为{,1}。如果你需要确保返回一个显式的布尔变量,那么你必须强制转换。