let obj = {
i:1,
toString:function(){
return obj.i++;
}
}
console.log(obj==1); // true
console.log(obj==2); // true
console.log(obj==3); // true
let a = false,b=true,c='1n1a',d=1,obj1={};
a--;
b++;
c++;
d++;
obj1++;
console.log(a,b,c,d,obj1); // -1 2 NaN 2 NaN
递增递减遵循以下规则
| 类型 | ++ 结果 | -- 结果 | 备注 |
|---|---|---|---|
| 有效数字字符的字符串 “1” | 2 | 0 | 先转为数字,再执行加1减1 |
| 不包含有效数字字符的字符串 “1n1a” | NaN | NaN | |
| 布尔值false/true | 1 /2 | -1/0 | 先转为数字, 再执行加1减1 |
| 浮点数值 1 | 2 | 0 | |
| 应用在对象上 let obj1={} | NaN | NaN | 先调用对象valueOf方法,取得可供操作的值,如果结果为NaN,再调用toString()方法 |
上述题目之所以obj递减后不是NaN,主要是因为obj改写了toString方法,不再继承来自原型链上的toString(等同于Object.prototype.toString())
toString()方法返回一个表示该对象的字符串。