Boolean
除了‘undefined,null,0,-0,NaN,false,‘ ’ ’之外 都转换为true,包括所有对象!
对象转原始类型
对象在转换 是调用 symbol.toPrimitive()方法来进行转换:
- 如果已经是原始类型了,那就不需要转换了
- 如果需要转字符串类型就调用
x.toString()
,转换为基础类型的话就返回转换的值。不是字符串类型的话就先调用valueOf
,结果不是基础类型的话再调用toString
- 调用
x.valueOf()
,如果转换为基础类型,就返回转换的值 - 如果都没有返回原始类型,就会报错
四则运算符
运算中 一方 为字符串的话,会将另一方也转换为字符串
如果一方不是字符串或者数字的话,会将另一方转换成数字或者字符串
1 + '1' // '11'
true + true // 2
4 + [1,2,3] // "41,2,3"
比较运算符
如果是对象,则通过toPrimitive()来转换对象
如果是字符串 则通过unicode字符索引来比较
let a = {
valueOf() {
return 0
},
toString() {
return '1'
}
}
a > -1 // true