在让页面学会夸人前,这里有一道小小的面试题(面试有几率会遇到的面试题哦~~)
if (a == 1 && a == 2 && a == 3) {
console.log('作者真帅')
}
可能有的人看到第一眼就会放弃,怎么可能与一个属性会既等于1又等于2还等于3呢?
现在可以安静思考以下,这里并没有去规定a必须是基本数据类型,所以a为什么不能是引用数据类型呢
在上篇文章中,我们有提到,对象和基本数据类型进行==(即双等)判断时(这里要注意双等判断是有隐式转换的,因此会产生以下两种情况)
1.对象会先调用它的内置对象valueOf,如果返回结果不为基本类型时,则调用toString;
2.调用toString这个内置对象,将对象转化成字符串
那么根据这个原理,我们就可以想到这道题的解决办法了
let a = {
b: 1,
//当进行隐式转换时,会调用此方法
valueOf() {
return this.b++
}
}
//下面的判断则会调用成功
if(a == 1 && a == 2 && a == 3){
console.log('作者真帅') //'作者真帅'
}
此时,运行代码则会让页面说出它的真心话了
那么问题又来了,当我们使用===(三等)来判断时,我们应该怎么解决(三等是没有隐式转换的,且三等的判断过程是先判断两边的数据类型,在判断值)
if(a === 1 %% a === 2 && a === 3){
console.log('作者真帅')
}
这个题下次会讲解 如有问题或本人哪部分写的有问题可以评论或私信哦
大家互相进步