一、写在前面
今天看到一个面试题目,关于js的隐式类型转化的题目,但是我不会,下面将题目附上。
// 哪些为真?
if([])
if({})
if([]==false)
if({}==false)
if([] == ![])
二、转化规则
如果再次遇到这种题目,我们记住这个图即可。
1、
如果要是其中一个值为布尔值
,则将其转化为Number
类型的值2、
如果其中一个值为字符串
类型的,另一个值为数值
类型的值,则将其转化为Number
类型的值再比较。3、
如果其中一个值为对象,另一个不为对象,则调用ToPromitive
方法,则进行比较,ToPrimitive
先调用toString方法
,然后再调用valueof
方法。4、
如果两个都是对象,则判断指向是否一样。
三、看上述题目3.1
if([]) {
console.log('真的')
}
[]
转化为布尔值,则为true
,所以打印会执行。3.2
if({}) {
console.log('真的')
}
{}
转化为布尔值,则为true
,所以打印会执行。3.3
if([] == false){
console.log('真的')
}
因为右边是布尔值,所以右边应该转化为number
类型,此时右边的值为0
,左边也应该转化为number
类型,此时转化为number
类型的值为0
,所以此时相等。会打印结果.3.4
if({}==false){
console.log('真的')
}
因为右边为布尔值,此时应该将其转化为number
类型的值,此时右边的值为0
,左边的值应该转化为number
类型,此时转化为1
,所以不相等,不会打印。3.5
if([] == ![]){
console.log('真的')
}
因为右边![]
为false
,转化为number类型的值为0
,并且左边转化为number
类型的值为0
,所以此时相等,可以打印。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_47450807/article/details/123770951
内容来源于网络,如有侵权,请联系作者删除!