双等号(==)转换规则

217 阅读1分钟
  1. 对象 == 字符串,对象 toString()变为字符串;
  2. null == undefined 相等,但是和其它值比较就不再相等;
  3. NaN == NaN 不相等,与其它的所有都不相等;
  4. 剩下的都是转换为数字。

"1" == true;    => true

对象变数字顺序,先将对象转成字符串,然后转成数字:.toString() => Number()


示例:a 为什么的情况下,下面的条件成立

var a = ?;
if(a == 1 && a == 2 && a == 3) {
    console.log(1);
}

//方法一:toString
var a = {
    i: 0,
    toString() {
        return ++this.i;
    }
};

//方法二:数据劫持
var i = 0;
//监听a, 获取a时进行处理,返回值
Object.defineProperty(window, 'a', {
    get() {
        return ++i;
    }
});
注:defineProperty GETER拦截器中不能再次获取当前属性

//方法三
var a = [1, 2, 3];
//shift: 删除第一项并返回值
a.toString = a.shift;