js面试题:a==1&&a==2&&a=3的两个思路

看到了一道面试题:a==1&&a==2&&a==3在什么时候成立,查阅资料后总算明白了,记录一下。

一.利用==中的隐式类型转换

1.原理与思路

首先要了解==运算符中究竟发生了什么。

js调用==进行比较时,不同与===,双等号会触发类型转换,进行比较的事实上不是原始值,而是valueOf()的返回值,类型转换可能会触发两个函数,分别是toString()与valueOf(),关于区别可参照https://www.jb51.net/article/102027.htm

在这里调试后发现触发了valueOf(),每进行一次比较就调用一次,我们可以做一些简单代码来测试是否正确。

//定义obj2,重写方法
let obj2={
  arr:[1,2,3],
  toString:()=>{
    console.log("toString")
  },
  valueOf:()=>{
    console.log("valueOf")
  }
}

接着在控制台输入==来进行比较操作,查看结果。

的确是调用了valueOf(),所以我们可以在这里做一些手脚。

 

2.JS实现

//定义obj3来完成操作
let obj3={
    i:1,
    valueOf:()=>{
        return obj3.i++
    }
}


二.利用definProperty的get方法

1.原理与思路

js调用对象属性时时经过了get与set一层的,我们可以在这里进行改动。

2.js实现

let a={
    temp:'',
    time:0
}
Object.defineProperty(a,"temp",{
    get:function(){
        return a.time++;
    }
})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值