前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Object.defineProperty 与 Proxy 实现a===1&&a===2&&a===3 结果为true

Object.defineProperty 与 Proxy 实现a===1&&a===2&&a===3 结果为true

作者头像
用户9914333
发布2022-07-21 19:54:52
2910
发布2022-07-21 19:54:52
举报
文章被收录于专栏:bug收集bug收集

bug收集:专门解决与收集bug的网站

网址:www.bugshouji.com

01

问题

上一篇文章实现了 ( a == 1 && a == 2 && a == 3 ) 结果为true.

现在要实现 (a === 1 && a === 2 && a === 3 ) 结果为true, 之前重写对象的toString 或 valueOf 的方法就实效了,需要用 Object.defineProperty 劫持数据 或 ES6 Proxy 代理来,实现结果为true

02

Object.defineProperty实现

使用Object.defineProperty劫持window对象的a属性的getter方法
代码语言:javascript
复制
var value = 1;
Object.defineProperty(window,"a",{
    get(){
       return value++;
    }
});
if (a === 1 && a === 2 && a === 3){
    console.log("hello world")
}
// 测试结果输出了 "hello world" 

03

利用es6的代理proxy

代码语言:javascript
复制
var value = 1;

let proxy = new Proxy(window, {
  get(target, key, receiver) {
    if(key === 'a') {
      return target.value ++
    } 
  }
})

if (a === 1 && a === 2 && a === 3){
    console.log("hello world")
}
// 测试结果也输出了 "hello world"

总结:如果是两个等号==, 主要就是考隐式转换,如果是三个等号===,主要就是考 get 数据劫持, 完了,希望这次主题分享大家会喜欢

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 bug收集 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用Object.defineProperty劫持window对象的a属性的getter方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档