4

下划线

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

的目的是什么!!。它认为 and 语句的结果总是对或错。

我已经看到这被用作“转换”为布尔类型的方式。

但我认为这里没有必要。

4

2 回答 2

6

!!技巧可确保输出为真假。

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;
于 2013-05-03T19:06:41.883 回答
3

请注意,如果obj是 0、NaN、null、undefined 或空字符串,则表达式将计算结果为 ,而不是false。如果您需要确保返回一个显式的布尔变量,那么您必须进行强制转换。

于 2013-05-03T19:05:34.143 回答