如何让 (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?