Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >(a ==1 && a== 2 && a==3) 有可能是 true 吗?

(a ==1 && a== 2 && a==3) 有可能是 true 吗?

作者头像
用户9914333
发布于 2022-07-21 11:54:31
发布于 2022-07-21 11:54:31
40400
代码可运行
举报
文章被收录于专栏:bug收集bug收集
运行总次数:0
代码可运行

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

网址:www.bugshouji.com

01

问题

一个有趣的问题 ,也是很多大公司的面试题

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var a = ? 
if(a == 1 && a == 2 && a == 3) { 
  console.log('Hello World!'); 
}

如上代码:a 等于什么的时候?, 可以满足条件,输出hello world

02

答案 & 解析(请看到最后)

大部分解决方法都是使用toString或者valueOf实现的,主要利用:运算数两边的类型不同时,会进行隐式转换.

注:当对象没有valueOf方法时,将会使用toString方法,所以重写这两个方法都可以。

重写valueOf

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const a = { 
     num:0, 
     valueOf: function(){
          return this.num+=1
     }
}

重写toString

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const a = { 
     num:0, 
     toString:function(){
          return this.num+=1
     }
}

03

疑问

大家会发现,上面用的是两个等号==

如果是三个等号===呢?

如何让(a===1&&a===2&&a===3)的值为true

上面的方法,已经失效了

这需要使用Object.defineProperty来解决,使用它来劫持a变量

具体解析,请看明天的文章

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Object.defineProperty 与 Proxy 实现a===1&&a===2&&a===3 结果为true
上一篇文章实现了 ( a == 1 && a == 2 && a == 3 ) 结果为true.
用户9914333
2022/07/21
3340
Object.defineProperty 与 Proxy 实现a===1&&a===2&&a===3 结果为true
全面分析toString与valueOf,并随手解决掉几道大厂必备面试题
最近深圳的天气是变化多端的,时而倾盆大雨,时而艳阳高照,多希望能有个几天是连绵不绝地下雨,那该多好啊~~
用户1890129
2020/12/16
4340
你确定(a == 1 && a == 2 && a == 3)不能为true?
前言 最近遇到一个非常有意思的面试题: JavaScript中有没有可能让(a== 1 && a ==2 && a==3)返回true? 讲真刚看到这题的时候,我是用这种眼神看面试官的:你TM逗我呢?
前端胖头鱼
2022/07/25
4720
你确定(a == 1 && a == 2 && a == 3)不能为true?
大厂面试题分享:如何让(a===1&&a===2&&a===3)的值为true?
当我第一次看到这一题目的时候,我是比较震惊的,分析了下很不合我们编程的常理,并认为不大可能,变量a要在同一情况下要同时等于1,2和3这三个值,这是天方夜谭吧,不亚于哥德巴赫1+1=1的猜想吧,不过一切皆有可能,出于好奇心,想了许久之后我还是决定尝试解决的办法。
wscats
2020/06/05
9510
奇怪的知识增加了,如何让 (a == 1 && a == 2 && a == 3) 返回 true
原文:http://www.fly63.com/article/detial/851
@超人
2021/04/26
1.2K0
奇怪的知识增加了,如何让 (a == 1 && a == 2 && a == 3) 返回 true
玩转js类型转换
对于object和number、string、boolean之间的转换关系,这里偷网上一幅图
IMWeb前端团队
2019/12/03
6.1K0
玩转js类型转换
关于函数柯里化使用的一道面试题
第一次看到柯里化这个词的时候,会感觉很高端,实际上当你了解了后会发现其实就是高阶函数的一个特殊用法。
用户9914333
2022/07/21
2460
关于函数柯里化使用的一道面试题
玩转JS的类型转换黑科技0.前言1.奇葩例子2.从[]==![]开始3.从已有的得到想不到的4.关于(a==1 && a==2 && a==3)4.2 ===
js身为一种弱类型的语言,不用像c语言那样要定义int、float、double、string等等数据类型,因为允许变量类型的隐式转换和允许强制类型转换。我们在定义一个变量的时候,就一个var、let、const搞定,不用担心数据的类型。比如常见的字符串拼接,用+号可以实现变量和字符串的拼接。 总的来说,一般的规则是
lhyt
2018/10/31
9050
JavaScript 中的相等性判断
简而言之,在比较两件事情时,双等号将执行类型转换; 三等号将进行相同的比较,而不进行类型转换 (如果类型不同, 只是总会返回 false ); 而Object.is的行为方式与三等号相同,但是对于NaN和-0和+0进行特殊处理,所以最后两个不相同,而Object.is(NaN,NaN)将为 true。(通常使用双等号或三等号将NaN与NaN进行比较,结果为false,因为IEEE 754如是说.) 请注意,所有这些之间的区别都与其处理原语有关; 这三个运算符的原语中,没有一个会比较两个变量是否结构上概念类似。对于任意两个不同的非原始对象,即便他们有相同的结构, 以上三个运算符都会计算得到 false 。
用户7293182
2022/01/17
1.2K0
JavaScript 中的相等性判断
热乎的~前端面试题(昨天)
Immerse
2024/03/13
1710
热乎的~前端面试题(昨天)
这可能是你需要的vue考点梳理
Vue2.x开始引入"Virtual DOM",消除了和React在这方面的差异,但是在具体的细节还是有各自的特点。
bb_xiaxia1998
2022/11/01
1.2K0
空值合并运算符(??)
使用空值合并运算符为常量提供默认值,保证常量不为 null 或者 undefined。
用户9914333
2022/12/14
1.7K0
空值合并运算符(??)
实现一个自己的MVVM
vue数据双向绑定是通过数据劫持结合发布者-订阅者模式的方式来实现的,那么vue是如果进行数据劫持的,我们可以先来看一下通过控制台输出一个定义在vue初始化数据上的对象:
前端迷
2019/12/05
5750
实现一个自己的MVVM
为什么 Vue3.0 要重写响应式系统
面试的时候经常被问到 响应式 相关的内容,而Vue3.0 更新后,面试官又有了新的武器;
西岭老湿
2021/01/26
1.1K0
为什么 Vue3.0 要重写响应式系统
new new Foo().getName()解析
看到一道非常经典的面试题,其中最大的亮点就是关于new new Foo().getNam() 的输出结果,话不多说,下面就来看看这道题
用户9914333
2022/07/21
1.3K0
new new Foo().getName()解析
最新前端面试总结
yield实际就是暂缓执行的标示,每执行一次next(),相当于指针移动到下一个yield位置
loveX001
2022/12/19
3260
JavaScript类型转换总结与常见情况解析
类型转换是将值从一种类型转换为另一种类型的过程(比如字符串转数字,对象转布尔值等)
Leophen
2019/08/23
1.8K0
JavaScript类型转换总结与常见情况解析
腾讯二面vue面试题总结
对象内部通过 defineReactive 方法,使用 Object.defineProperty 来劫持各个属性的 setter、getter(只会劫持已经存在的属性),数组则是通过重写数组7个方法来实现。当页面使用对应属性时,每个属性都拥有自己的 dep 属性,存放他所依赖的 watcher(依赖收集),当属性变化后会通知自己对应的 watcher 去更新(派发更新)
bb_xiaxia1998
2022/11/18
8110
2023前端二面手写面试题总结_2023-02-23
题目描述:JS 实现一个带并发限制的异步调度器 Scheduler,保证同时运行的任务最多有两个
用户10358576
2023/02/23
6380
带你彻底搞懂Vue3的Proxy响应式原理!TypeScript从零实现基于Proxy的响应式库。
笔者最近在浏览React状态管理库的时候,发现了一些响应式的状态管理库如 hodux,react-easy-state,内部有一个基于proxy实现响应式的基础仓库observer-util,它的代码实现和Vue3中的响应式原理非常相似,这篇文章就从这个仓库入手,一步一步带你剖析响应式的实现。
ssh_晨曦时梦见兮
2020/04/11
1.9K0
推荐阅读
相关推荐
Object.defineProperty 与 Proxy 实现a===1&&a===2&&a===3 结果为true
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验