有趣的"=="与"==="

console.log([]==![]);//true //"=="会进行类型转换,转换成统一类型进行比较 // !符号优于==,[]boolean值为TRUE,所以![]就是FALSE, // 根据转换规则,右边转换成number类型为0,左边[]转换成number类型为0 // 所以两者相等。 console.log([]===![]);//false //===不会进行类型转换 const a ={ value:[3,2,1], valueOf:function(){//valueOf是固定方法,返回原始类型的值 return this.value.pop(); }, } console.log(a==1&&a==2&&a==3);//true //js解析会将a转换成number类型,所以结果会是true //首先你需要知道object.prototype.valueOf() //对象a调用valueOf返回了ToObject(value),因为 //value是number类型,所以返回了一个number的对象, //值为参数,最终js引擎将其转换成原始类型,所以最终的结果才会true.
var value = 0; Object.defineProperty(window, 'a', { get: function() { return this.value += 1; } }); console.log(a===1&&a===2&&a===3);//true //主要是利用了property这个函数
上一篇:java中基本数据类型对应的包装器类型以及装箱操作和拆箱操作


下一篇:面试题:交换两个类型不知的变量的值,不能用第三个变量