symbol属性总结1
对象的
Symbol.toPrimitive
属性,指向一个方法。该对象被转为原始类型(number、string、Boolean、null、undefined、symbol、bigInt)的值时,会调用这个方法,返回该对象对应的原始类型值。
Symbol.toPrimitive
被调用时,会接受一个字符串参数,表示当前运算的模式,一共有三种模式。
- Number:该场合需要转成数值
- String:该场合需要转成字符串
- Default:该场合可以转成数值,也可以转成字符串
参数的三个值测试
let obj = {
[Symbol.toPrimitive](hitn) {
console.log(hitn)
}
}
Number(obj)
String(obj)
Boolean(obj)//不生效
10 + obj
10 - obj//数据隐形转换
Symbol.toPrimitive应用
let time = new Date()
>time
>Sun Dec 05 2021 12:59:52 GMT+0800 (中国标准时间)
>Number(time)
>1638680392489
Number(time) 浏览器转换->time[Symbol.toPrimitive]('number')没有toPrimitive属性会找valueof获取原始值
1638680392489
可以结合js数据类型转换理解
重构对象的Symbol.toPrimitive
let obj = {
[Symbol.toPrimitive](hint) {
switch (hint) {
case 'number':
return 123;
case 'string':
return 'str';
case 'default':
return 'default';
default:
throw new Error();
}
}
};
2 * obj // 246
3 + obj // '3default'
obj == 'default' // true
String(obj) // 'str'