如何让 (a == 1 && a == 2 && a == 3) 的值为 true
Object 转换为原始类型
如果部署了
[Symbol.toPrimitive]接口,那么调用此接口,若返回的不是基本数据类型,抛出错误。如果没有部署
[Symbol.toPrimitive]接口,那么根据要转换的类型,先调用valueOf / toString非Date类型对象,
hint是default时,调用顺序为:valueOf >>> toString,即valueOf返回的不是基本数据类型,才会继续调用valueOf,如果toString返回的还不是基本数据类型,那么抛出错误。如果
hint是string(Date对象的hint默认是string) ,调用顺序为:toString >>> valueOf,即toString返回的不是基本数据类型,才会继续调用valueOf,如果valueOf返回的还不是基本数据类型,那么抛出错误。如果
hint是number,调用顺序为:valueOf >>> toString
题解
隐式转换
// 部署 [Symbol.toPrimitive] / valueOf / toString 均可
let a = {
[Symbol.toPrimitive]: (function(hint) {
let i = 1;
return function() {
return i++;
}
})()
}数据劫持
let a = new Proxy({}, {
i: 1,
get: function() {
return () => this.i++;
}
})数组的
toString接口默认调用数组的join方法,重写join方法
let a = [1, 2, 3];
a.join = a.shift;Last updated
Was this helpful?