第64天 如何让(a==1 && a==2 && a==3)的值为true,把"=="换成"==="后还能为true吗?
Activity
xn213 commentedon Jun 18, 2019
好像是利用
valueOf()
toString()
==
的类型转换实现, 换成===
不能为truehaizhilin2013 commentedon Jun 18, 2019
@xn213 如果为"=="时,那a的值为多少呢?换成"==="后不能为true了吗?你的理由是什么呢?
xn213 commentedon Jun 18, 2019
==
可以进行类型转换, 才可能等1等2等3 ,===
即先比较类型再比较值, 类型不同直接返回false, 理解这样,或许 nothingIsImpossible,,,,,
haizhilin2013 commentedon Jun 18, 2019
但我认为是可以做得到的,期待……
WebMrYang commentedon Jun 19, 2019
(a++==1 && a++==2 && a++==3)
jiangli373 commentedon Jun 19, 2019
WANGSHUZHI commentedon Jun 19, 2019
期待这个答案
zhulinghao commentedon Jun 19, 2019
haizhilin2013 commentedon Jun 19, 2019
改为全等的时候呢?
AnsonZnl commentedon Jun 19, 2019
简单来说就是
==
会触发valueOf()
方法参考:https://juejin.im/post/5bfcc632f265da61493353cc
forever-z-133 commentedon Jun 19, 2019
还可以利用 Array 与数字判断时会转字符串再转数字的规律,改写 join 方法。
xn213 commentedon Jun 19, 2019
#295 (comment)
那参考这篇文章分析的应该足够了
HuaRongSAO commentedon Jun 21, 2019
===
严格相等,会比较两个值的类型和值==
抽象相等,比较时,会先进行类型转换,然后再比较值"==" 转化规则:
首先通过valueOf 转换,即 obj.valueOf()方法的返回值
如果 obj.valueOf()方法的返回值是原始类型,那么直接返回
如果不是,再通过 obj.toString()方法转换
如果obj.toString()返回的是原始类型,直接返回该值
如果还不是原始类型,抛出不能转换异常。
leehf commentedon Jul 5, 2019
var a=[1,2,3];
a.join=a.shift;
console.log(a==1&&a==2&&a==3)
KiraYo4kage commentedon Jul 5, 2019
canvas2000 commentedon Jul 18, 2019
let a
!(a==1 && a==2 && a==3)
wsgwwdaa commentedon Aug 30, 2019
你可真是个天才
seho-dev commentedon Oct 10, 2019
这个答案太秀了
ducky-YFH commentedon Oct 26, 2019
独秀同学请坐
censek commentedon Dec 10, 2019
还是没有懂……
summarychm commentedon May 6, 2020
利用Object.defineProperty添加get描述符就可以了吧.
smile-2008 commentedon Jan 2, 2021
1684838553 commentedon Dec 9, 2021
把“==”换成“===”不能为true
在这里,a的数据类型为object
xiaoqiangz commentedon Jun 16, 2022
const a = { value: 0 }
a.valueOf = function() {
return this.value +=1
}
console.log(a==1 && a==2 && a==3)
dragon-sing commentedon Nov 1, 2022
panpanxuebing commentedon Dec 14, 2024
引用类型和数字使用==比较时,依次调用其toString和toValue方法。改为全等后不触发隐式转换。