首先我们要知道,在 JS 中类型转换只有三种情况,分别是:
-
转换为布尔值
-
转换为数字
-
转换为字符串
-
如果已经是原始类型了,那就不需要转换了
-
调用
x.valueOf()
,如果转换为基础类型,就返回转换的值 -
调用
x.toString()
,如果转换为基础类型,就返回转换的值 -
如果都没有返回原始类型,就会报错
当然你也可以重写 Symbol.toPrimitive
,该方法在转原始类型时调用优先级最高。
let a = {
valueOf() {
return 0
},
toString() {
return '1'
},
[Symbol.toPrimitive]() {
return 2
}
}
1 + a // => 3