js各个数据类型在if条件中是true还是false

看到这么一个题目,问什么情况下控制台会输出hello
if (input) {
	console.log('hello')
}
// input的选项有以下:'', null, NaN, 0, [], {}, Boolean(false), false, true, undefined, 'false'

结论:当input为[], {}, true, 'false’时控制台会输出hello,其余均不会。

当input是[]时,控制台打印了hello说明[]是true的,但是问题又来了
let arr = []
console.log(arr == true) // false
console.log(arr == false) // true

我们直接将空数组与布尔值false进行比较时,控制台打印的却是false。

我们将数组转换为Boolean,再比较
let arr = []
let booleanArr = new Boolean(arr)
console.log(booleanArr == true) // true
console.log(booleanArr == false) // false

由此得知在if条件中的比较会先将input转换为Boolean然后再进行比较。

那么我们回过头来看在数组arr与布尔值进行非严格相等(==)比较时到底发生了什么?

结论:任意值与布尔值进行比较时会将两边的值转换为Number。

console.log(Number([])) // 0
console.log(Number(true)) // 1
console.log(Number(false)) // 0

所以当数组[]与布尔值true直接进行非严格相等比较的时候,返回的是false。

js中非严格相等(==)的比较总结

ECMAScript中相等操作符由两个等于号(==)表示,如果两个操作数相等,则返回true,这种操作符都会先转换操作数(通常称为强制转型),然后再比较它们的相等性,在转换不同的数据类型时,对于相等和不相等操作符:在JS高程中一书中给出如下的基本转换规则:

  • 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值——false转换为0,而true转换为1;
  • 如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值
  • 如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类型值按照前面的规则进行比较

这两个操作符在进行比较时则要遵循下列规则:

  • null 和undefined 是相等的
  • 要比较相等性之前,不能将null 和 undefined 转换成其他任何值
  • 如果有一个操作数是NaN,则相等操作符返回 false ,而不相等操作符返回 true。重要提示:即使两个操作数都是NaN,相等操作符也返回 false了;因为按照规则, NaN 不等于 NaN
  • 如果两个操作数都是对象,则比较它们是不是同一个对象,如果两个操作数都指向同一个对象,则相等操作符返回 true;否则, 返回false
js非严格相等(==)比较表

在这里插入图片描述附文档链接:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Equality_comparisons_and_sameness#非严格相等

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值