1. // 题目1:如下代码输出什么?
  2. if ("hello") {
  3. console.log("hello")
  4. }

hello 注: “hello”为String,被转换为True 等同于 if (true) {console.log(“hello”)}

  1. // 题目2:如下代码输出什么?
  2. if ("") {
  3. console.log('empty')
  4. }

undefined 注:””为空字符串,被转换为False

  1. // 题目3:如下代码输出什么?
  2. if (" ") {
  3. console.log('blank')
  4. }

blank 注:” “ 为String类型,因为除空字符串为false,其他都为true。

  1. // 题目4:如下代码输出什么?
  2. if ([0]) {
  3. console.log('array')
  4. }

array 注:[0]为Object类型,被转换为True

  1. if('0.00'){
  2. console.log('0.00')
  3. }

0.00 注: ‘0.00’为String类型,非空 为true

  1. if(0.00){
  2. console.log('0.00')
  3. }

undefined 注: 0.00为Number类型,被转换为0,false

小结:对于括号里的表达式,会被强制转换为布尔类型

原理

类型 结果
Undefined false
Null false
Boolean 直接判断
Number +0, −0, 或者 NaN 为 false, 其他为 true
String 空字符串为 false,其他都为 true
Object true

  1. !" " == true
  2. // false
  3. !" " == false
  4. // true

注:出现!,则先转换为布尔值。转换规则是除了undefined、null、false、0、NaN、””或’’(空字符串)为false,其他值都视为true。所以!""与!" "被转换为false

x y 结果
null undefined true
Number String x == toNumber(y)
Boolean (any) toNumber(x) == y
Object String or Number toPrimitive(x) == y
otherwise otherwise false

toNumber

type Result
Undefined NaN
Null 0
Boolean ture -> 1, false -> 0
String “abc” -> NaN, “123” -> 123

阮一峰 相等运算符