‘+’和’==’隐式转换的变装游戏?一文带你揭秘
1. +
- ‘+’ 的转换原则
- 如果两个操作数都是数字:+ 运算符执行加法操作。
- 如果其中一个操作数是字符串:+ 运算符执行字符串连接操作。
- 如果其中一个操作数是对象(如数组):+ 运算符首先尝试将对象转换为原始值(通过调用 valueOf() 或 toString() 方法),然后再根据转换后的原始值类型决定执行加法还是字符串连接。
console.log(1 + '1') // 11
console.log( + '1') // 1
console.log( + []); // 0
console.log( + ['1']) // 1
console.log( + {}) // NaN
console.log([] + {}) // [object Object]
console.log([] + []) // ""
console.log({} + {}) // [object Object][object Object]
2. ==
- ‘==’的转换原则
- 如果两个操作数的类型相同:
- 如果两个操作数都是 undefined 或 null,则它们相等。
- 如果两个操作数都是数字,则直接比较它们的值。
- 如果两个操作数都是字符串,则直接比较它们的值。
- 如果两个操作数都是布尔值,则直接比较它们的值。
- 如果两个操作数都是对象,则比较它们是否引用同一个对象。
- 如果两个操作数的类型不同:
- 如果一个操作数是 null,另一个操作数是 undefined,则它们相等。
- 如果一个操作数是数字,另一个操作数是字符串,则尝试将字符串转换为数字,然后比较。
- 如果一个操作数是布尔值,另一个操作数是数字或字符串,则尝试将布尔值转换为数字(true 转换为 1,false 转换为 0),然后比较。
- 如果一个操作数是对象,另一个操作数是数字或字符串,则尝试将对象转换为原始值(通过调用 valueOf() 或 toString() 方法),然后比较。
console.log(true == 1); // true
console.log(false == 0); // true
console.log(5 == '5'); // true
console.log(null == undefined); // true
var obj = { valueOf: function() { return 2; } };
console.log(obj == 2); // true
console.log(NaN == NaN); // false
console.log(0 == -0); // true
console.log([]==[]) // false 不同的地址
let x=123;
let y ={
valueOf:function(){
return 123;
}
}
console.log(x == y) // true
相信看完本次分享你已经对JS的类型转换有了一个大概的认识了,那就快去实战检验一下吧,如果你觉的对你有帮助的话就点个赞再走吧
发表评论