来自 underscore :

  _.isElement = function(obj) {
    return !!(obj && obj.nodeType === 1);
  };
!! 的目的是什么。它认为 and 语句的结果总是真或假。

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

但我认为这里没有必要。

最佳答案

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

当 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,结果始终为真或假:
e         !e       !!e
-------   ------   ------
TRUTH-y   false    true
FALSE-y   true     false

表达原始表达式的另一种方法,我实际上经常使用它:
return obj ? obj.nodeType === 1 : false;

关于javascript - "casting"从 bool 运算符返回的目的是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16365886/

10-12 12:41
查看更多