技术频道


在JavaScript中将值转换为布尔值的2种方法

Boolean(value);

!!value;

将值转换为布尔值


String 字符串

const string = 'string';

!!string; // true
Boolean(string); // true
Number 数字

const number = 100;

!!number; // true
Boolean(number); // true
Falsy Values - 虚值(是在 Boolean 上下文中认定为 false 的值)

在 JavaScript 中,有 7 个 Falsy Values。 如果将其中任何一个转换为布尔值,它将返回 false。

false //  false 关键字
undefined //undefined - 原始值
null //null - 缺少值
NaN //NaN - 非数值
0 //数值 zero
"" //空字符串
0n //当 BigInt 作为布尔值使用时, 遵从其作为数值的规则. 0n 是 falsy 值

任何不在上述的虚值里的,都会返回 true ?

例子


!! 用于虚值

!!false; // false
!!undefined; // false
!!null; // false
!!NaN; // false
!!0; // false
!!''; // false
!!0n; //false

Boolean 用于虚值

Boolean(false); // false
Boolean(undefined); // false
Boolean(null); // false
Boolean(NaN); // false
Boolean(0); // false
Boolean(''); // false
Boolean(0n); //false

!! 的工作原理


第一个 ! 将值强制为布尔值并将其取反。在这种情况下,!value 将返回 false。因此,要将其恢复为 true,我们可以再加上一个 !。因此具有双 !!

const value = 'string';

!value; // false
!!value; // true

注意'false'


const value = 'false';

!!value; // true
Boolean(value); // true

注意 "false" 引号之间的 '。虽然说 false,但实际上是一个字符串 ?。

!! 和 Boolean() 的性能测试


!! 比 Boolean 会稍微快一点点~ 点击这里 查阅测试

避免 new Boolean


var str = 'str';

// Avoid
typeof new Boolean(str); // object

// Preferred
typeof Boolean(str); // boolean
typeof !!str; // boolean

奇淫巧技:使用布尔构造函数移除空字符串


如果您得到一个由逗号分隔的字符串值列表,并希望筛选出空字符串,则可以将布尔构造函数函数传递到 Array.prototype.filter 中,它将自动剔除零长度字符串,只留下有效字符串数组。

var str = 'some,list,,of,values';
var arr = str.split(',');

arr; // [ 'some', 'list', '', 'of', 'values' ]
arr.filter(Boolean); // [ 'some', 'list', 'of', 'values' ]

JavaScript Not Not 操作符扩展阅读:



发表评论