问题是可以解决了。
评论区的有掘友说让 a = true 也可以解决的。确实很有误导性。其实是混淆了隐式转化的优先级。简单来说,隐式转化是由两部分组成:转化的规则 + 触发转化的条件。if
包着的里面整体触发了Boolean()
的转化规则,==
又字符串在右侧触发toString()
的转化规则。
回到这题,==
的右边是数字,JS运行线路是从左到右的。所以,这个时候触发的是Number()
的规则,把左侧的true
转化为1
之后,两边类型一致之后,那自然不会再触发什么规则了,此时已经不构成隐式转化。所以说1 == 1 && 1 == 2 && 1 == 3
是不成立的。
现在记住了,也比面试过程中的时候再来记好
现在将题目简单修改一下,将双等变成三个等怎么办?
大家都知道===
的话是先判断类型,再判断值。这里的toString
已经默认把对象转化为字符串了.使用toStirng
的话,结果就不成立了.
2.2 defineProperties
使用对象的数据拦截法:
Object.defineProperties(window, {
_a: {
value: 0,
writable: true
},
a: {
get: function() {
return ++_a
}
}
})
涉及到对象的访问器相关内容
不知道是否让你想起Vue中的watch或者computed的指令呢?
三、总结
是否会做这道面试题没有任何意义。但是能够了解到这个面试题包含的知识点就很有意思。
从隐式类型转换到原型和原型链,最后到对象的访问权属性。如果要继续延伸的话,Vue的双向绑定的实现原理,class中static的实现等等。
这些就是为什么说,要构建前端的知识体系,能够从一个知识点延伸到相关的其他知识点。
【推荐学习:javascript高级教程】
以上就是面试题:怎么让“a==1&&a==2&&a==3”成立?的详细内容,更多请关注编程网其它相关文章!