从布尔运算符"转换"返回的目的是什么?

4 javascript underscore.js

下划线:

  _.isElement = function(obj) {
    return !!(obj && obj.nodeType === 1);
  };
Run Code Online (Sandbox Code Playgroud)

是什么目的!!.它认为和陈述的结果总是真或假.

我已经看到这用作"强制转换"为布尔类型的方式.

但我不认为这里没有必要.

use*_*674 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
Run Code Online (Sandbox Code Playgroud)

这是TTL !e,结果总是真或假:

e         !e       !!e
-------   ------   ------
TRUTH-y   false    true
FALSE-y   true     false
Run Code Online (Sandbox Code Playgroud)

表达原始表达式的另一种方法,我经常使用它:

return obj ? obj.nodeType === 1 : false;
Run Code Online (Sandbox Code Playgroud)