最近,我被问到一个非常有趣的面试问题:(a== 1 && a==2 && a==3)能否在 JavaScript 中计算为 true? 我差点失去了工作机会,因为我无法回答。
那一刻,我被这个问题吓了一跳,以为面试官在开玩笑。
但当我看到他的“微笑”时,一种**“你一定不知道答案”**的感觉在我脑海中闪过。这绝对不是一个容易解决的问题。
本文将给出6个专业的答案。让我们马上开始吧。
第一个解决方案非常简单,我相信一旦你读完这段代码,你就会有一个想法。
太神奇了,这是怎么回事? 别担心,我的朋友,我会尽力解释原因。
在 JavaScript 中用于比较两个值时,将执行以下操作:==
对比规则如下表所示:
可以从表中获得一些信息。为了使(),a只能是以下几种情况:a == 1
规则 1 和规则 2 没有什么特别之处。让我们看一下 3:
当对象转换为原始类型时,将调用内置的 [ToPrimitive] 函数。逻辑大致如下:
我的朋友,谢谢你非常有耐心,阅读了很长时间,我相信你心里已经有答案了。
数组对象的隐式转换也符合规则 3,但 'join' 方法将在 “toString” 之前调用。所以你可以从这里开始。
MDN 有一个关于使用 的警告,好像它的存在是一个错误。我从未在工作中使用它,但它可以用来解决这个问题。with
你太聪明了,你甚至不需要我解释代码的含义。
我们可以使用隐式转换规则 3 来完成问题(看完答案,你就会知道为什么了!
通过隐式转换,我们做了 3 个让 return 成真的答案,你一定想到了另一个答案,伟大的 Vue 我们用它来赢得数百万开发者的心,我们也尝试用它来解决这个面试问题。a == 1 && a == 2 && a == 3data hijacking
通过劫持 'window' 对象,每次读取 'a' 属性时,_ a 都会加 1。
还有另一种劫持数据的方法,Vue3 也用 .Object.definePropertyProxy