“铸造”的目的是什么?布尔运算符的返回值

What is the purpose of "casting" the return from a Boolean operator?

本文关键字:布尔 运算符 返回值 铸造 是什么      更新时间:2023-09-26

From下划线:

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

!!的目的是什么?它认为and语句的结果总是为真或为假。

我曾见过这被用来"强制转换"为布尔类型。

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

当obj求值为假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;

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