Loading... ### 请实现一个变量可满足a==1 && a==2 && a==3 为true 当时刚看到这个题目说实话我很懵,这是怎么能实现的,但是掌握相关原理后感觉还是很神奇的 **这里主要涉及的就是对象-原始值的转换相关知识点,object一般转换成原始值就是三种hint:Number,String,Default然后Default基本就是转换成Number,所以一般就划分成两类,Number和String。** **然后关于对象转换,一般是先找object里面是否有Symbol.toPrimitive相关的方法,如果没有,就根据hint的类型,先后调用toString和valueOf方法,string的hint先调用toString,number和default都是先调用valueOf方法。** 所以回到问题,要实现以上逻辑,很明显,`==`会优先将变量转换成Number,所以hint即为number,那么便有两种方法来解决该问题: ```javascript let a={ i:1, [Symbol.toPrimitive](){ return this.i++; } }; console.log(a==1 && a==2 && a==3);//true ``` ```javascript let a={ i:1, valueOf(){ return this.i++; } }; console.log(a==1 && a==2 && a==3); ``` Last modification:July 28, 2021 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 如果觉得我的文章对你有用,请随意赞赏