在 JavaScript 中,其他值到布尔值的转换遵循以下规则:
1.Falsy 值(转换为false的值)
以下 6 个值在布尔上下文中会被转换为false:
false→false0和-0以及0n(BigInt) →false""(空字符串) →falsenull→falseundefined→falseNaN→false
2.Truthy 值(转换为true的值)
除了上述 6 个 Falsy 值之外的所有值都会转换为true:
- 非空字符串:
"0"、" "(空格)、"false"→true - 非零数字:
-1、1、Infinity→true - 对象(包括空对象、空数组):
{}、[]、function(){}→true Symbol:Symbol()→trueBigInt非零值:1n→true
转换方式
隐式转换(在条件语句中)
if(value){// value 为 truthy 时执行}if(!value){// value 为 falsy 时执行}value&&other;// 逻辑与value||other;// 逻辑或value?a:b;// 三元运算符显式转换
Boolean(value)// Boolean() 函数!!value// 双重取反常见示例
Boolean(0)// falseBoolean(1)// trueBoolean("")// falseBoolean("hello")// trueBoolean(null)// falseBoolean(undefined)// falseBoolean(NaN)// falseBoolean({})// trueBoolean([])// trueBoolean([0])// true(数组本身是对象)Boolean(false)// falseBoolean(true)// trueBoolean("0")// true(非空字符串)Boolean(" ")// true(空格也是非空字符串)Boolean(0n)// false(BigInt 零)Boolean(1n)// true注意事项
- 空数组
[]是 truthy,但[] == false为true(因为[]转为数字是0) - 空对象
{}是 truthy - 字符串
"0"和"false"是 truthy(因为它们是非空字符串) - 在条件判断中,只有那 6 个 Falsy 值会返回
false,其他所有值都是true