DamomHd / interview-question

整理各大厂面试题
1 stars 0 forks source link

如何让 if(a == 1 && a == 2 && a == 3)条件成立? #10

Open DamomHd opened 3 years ago

DamomHd commented 3 years ago

此题涉及到对象砖原始类型是根据什么流程运行的

对象转原始类型,会调用内置的[ToPrimitive]函数,对于该函数而言,其逻辑如下

    • 如果Symbol.toPrimitive()方法,优先调用再返回
    • 调用valueOf(),如果转换为原始类型,则返回
    • 调用toString(),如果转换为原始类型,则返回
    • 如果都没有返回原始类型,会报错
DamomHd commented 3 years ago
var a = {
    value: 0,
    valueOf: function() {
      this.value++;
      return this.value;
    }
};
console.log(a == 1 && a == 2 && a == 3); //true
DamomHd commented 3 years ago
var a = [1, 2, 3]
a.join = a.shift
console.log(a == 1 && a == 2 && a == 3)
DamomHd commented 3 years ago
function a() {};
a.count = 0;
a.toString = function() {
    return ++this.count;
}
console.log(a == 1 && a == 2 && a == 3);
DamomHd commented 3 years ago
(function init(vlaue = 0) {
    Object.defineProperty(globalThis, 'a', {
        get: () => ++vlaue
    });
})();

console.log(a === 1 && a === 2 && a === 3);