从下划线:
_.isElement = function(obj) {
return !!(obj && obj.nodeType === 1);
};
的目的是什么!!
。它认为 and 语句的结果总是对或错。
我已经看到这被用作“转换”为布尔类型的方式。
但我认为这里没有必要。
从下划线:
_.isElement = function(obj) {
return !!(obj && obj.nodeType === 1);
};
的目的是什么!!
。它认为 and 语句的结果总是对或错。
我已经看到这被用作“转换”为布尔类型的方式。
但我认为这里没有必要。
该!!
技巧可确保输出为真或假。
obj && ..
当 obj 计算结果为 false-y 值(例如“”或 0)时,表达式将产生 obj 的值。
有时输入对象与结果无关,这种“强制转换”(根本不是强制转换,而是强制转换)清理 API 并避免泄漏细节 - 可以确保只返回 true 或 false。
这是 的 TTL a && b
,请注意结果不一定是真或假:
a b a && b
------- ------ ------
TRUTH-y ANY b
FALSE-Y ANY a
这是 的 TTL !e
,结果始终为真或假:
e !e !!e
------- ------ ------
TRUTH-y false true
FALSE-y true false
表达原始表达的另一种方式,我实际上经常使用:
return obj ? obj.nodeType === 1 : false;
请注意,如果obj
是 0、NaN、null、undefined 或空字符串,则表达式将计算结果为 ,而不是false
。如果您需要确保返回一个显式的布尔变量,那么您必须进行强制转换。