摘要:所以能用的地方尽量用,相等运算符隐藏的类型转换,会带来一些违反直觉的结果。
这是在国外的一道面试题看到的,大家先自己想一下,在什么情况下这个判断会成立?
按正常思维想,这个是不可能成立的,但nothing is impossible,首先贴上正确答案代码
const a = { i: 1, toString: function () { return a.i++; } } console.log(a == 1 && a == 2 && a == 3)
这里做判断时,首先会调用valueOf函数,数组调用valueOf后返回的还是数组本身,就会再次调用toString函数,这里是重写了toString方法,并且return的是a.i++,所以每调用一次,都会在上次的值得基础上自加一次,
所以结果为true。
那么举一反三,这道题再变一下,“a===1 && a===2 && a===3 为true”改成这样,还能不能成立呢?
最后结果:
这是因为“===”代表全等(严格运算符),即值和类型都相等,其原理为“===”不会进行隐式转换,所以也就不会调用valueOf等方法了,而“==”为值相等(相等运算符),所以在比较不同类型的数据时,相等运算符会先将数据进行类型转换,然后再用严格相等运算符比较。
所以能用“===”的地方尽量用“===”,相等运算符隐藏的类型转换,会带来一些违反直觉的结果。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/105129.html
摘要:闭包正确的说应该是指一个闭包域每当声明了一个函数它就产生了一个闭包域可以解释为每个函数都有自己的函数栈每个闭包域对象都有一个不是属性内默认有个名为的全局引用有了这个引用就可以直接调用的属性或方法凡是在闭包域内声明的变量或方法外部无法直接访问 闭包 正确的说,应该是指一个闭包域,每当声明了一个函数,它就产生了一个闭包域(可以解释为每个函数都有自己的函数栈),每个闭包域(Function...
摘要:收集的一些前端面试题从面试题发现不足,进而查漏补缺,比通过面试更难得及各大互联网公司前端笔试面试题篇及各大互联网公司前端笔试面试题篇面试题个和个经典面试题前端开发面试题如何面试前端工程师很重要个变态题解析如何通过饿了么面试轻 收集的一些前端面试题 从面试题发现不足,进而查漏补缺,比通过面试更难得 1 BAT及各大互联网公司2014前端笔试面试题--Html,Css篇 2 BAT...
摘要:收集的一些前端面试题从面试题发现不足,进而查漏补缺,比通过面试更难得及各大互联网公司前端笔试面试题篇及各大互联网公司前端笔试面试题篇面试题个和个经典面试题前端开发面试题如何面试前端工程师很重要个变态题解析如何通过饿了么面试轻 收集的一些前端面试题 从面试题发现不足,进而查漏补缺,比通过面试更难得 1 BAT及各大互联网公司2014前端笔试面试题--Html,Css篇 2 BAT...
摘要:这是我在一次面试中,被面试官所提问的一道题在这次面试题中相等指的是对象的属性个数值相等有这样两个李德华张德华我能想到的一种方案解答过程的思考由于没有,我只能通过转化成数组进入第二步,对象中的属性在另一个中是否存在。 这是我在一次面试中,被面试官所提问的一道题 在这次面试题中 相等:指的是对象的属性个数值相等 有这样两个obj let obj1 = { name:李德华, ...
摘要:响应由三个部分组成,分别是状态行消息报头响应正文。详情参考小汪之前写的文章浏览器内核之解释器和模型解释解释过程是指从字符串经过解释器处理后变成渲染引擎内部规则的表示过程。 showImg(https://segmentfault.com/img/remote/1460000016404846); 前言 小汪最近在看【WebKit 技术内幕】一书,说实话,这本书写的太官方了,不通俗易懂。...
阅读 3280·2021-11-25 09:43
阅读 2083·2021-09-22 10:02
阅读 3309·2021-09-06 15:00
阅读 2297·2019-08-30 15:56
阅读 2346·2019-08-30 15:54
阅读 3223·2019-08-30 14:14
阅读 2257·2019-08-29 17:25
阅读 2901·2019-08-29 17:16