对象转换原始值的规则
本文最后更新于:2022年4月22日 上午
对象转换原始值的规则
对象转换原始值的规则
在 js
中,当我们把一个对象转换为原始值的时,会按照如下方式转换
调用
[Symbol.toPrimitive]
方法调用
valueOf
方法调用
toString
方法
基于该特性可以看以下例子
let obj = {
[Symbol.toPrimitive]() {
return '123';
}
};
console.log(obj == '123'); // true
基于该特性也衍生出一道面试题
面试题
if(a == 1 && a == 2 && a == 3){
console.log('true')
}
题解一
当理解了对象转原始值的规则后,解这道题就变得简单许多了,该方式可以重写 [Symbol.toPrimitive]
,valueOf
,toString
任意方法来实现
let i = 0;
let a = {
[Symbol.toPrimitive]() {
return ++i;
}
};
if (a == 1 && a == 2 && a == 3) {
console.log('true'); // true
}
题解二
使用 Object.defineProperty()
方式实现
let i = 0;
Object.defineProperty(window, 'a', {
get() {
return ++i;
},
});
if (a == 1 && a == 2 && a == 3) {
console.log('true'); // true
}
题解三
使用数组来实现
let a = [1, 2, 3];
a.valueOf = a.shift;
if (a == 1 && a == 2 && a == 3) {
console.log('true'); // true
}
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议,转载请注明出处。