如何实现 (a == 1 && a == 2 && a == 3) === true ?

2018-01-23 10:23:59 +08:00
 LeungJZ

js 真是门强 ke 大 pa 的语言。

const a = {
  i: 1,
  toString: function () {
    return a.i++;
  }
}

if(a == 1 && a == 2 && a == 3) {
  console.log('Hello World!');
}

toString 可以修改为 valueOf,如果两个都写,只会调用 valueOf。

var a ᅠ = 1;
var a = 2;
var ᅠ a = 3;
if(a ᅠ==1 && a== 2 &&ᅠ a==3) {
    console.log("Why hello there!")
}

这个感觉就莫名其妙的了。。。

a = [1,2,3];
a.join = a.shift;
console.log(a == 1 && a == 2 && a == 3);

这个其实原理和第一个一样,比较前先进行转换。

let a = {[Symbol.toPrimitive]: ((i) => () => ++i) (0)};

console.log(a == 1 && a == 2 && a == 3);

emmm... symbol 还没学。

这个问题真的是太可怕了,问出来估计真的没多少人能答得出来。

传送门: https://stackoverflow.com/questions/48270127/can-a-1-a-2-a-3-ever-evaluate-to-true#

7880 次点击
所在节点    JavaScript
33 条回复
mengyaoss77
2018-01-23 10:32:31 +08:00
为什么要和自己过不去。。。
w7938940
2018-01-23 10:35:43 +08:00
```javascript
var a = 9;

if ‌(a==1 && a== 2 && a==3)
{
document.write("<h1>Yes, it is possible!😎</h1>")
}

//--------------------------------------------

function if ‌(){return true;}
```
这个搞笑
LeungJZ
2018-01-23 10:47:03 +08:00
@w7938940
然而我这边报错了。
yutou527
2018-01-23 10:47:11 +08:00
@w7938940 关键字 兄弟
mdluo
2018-01-23 10:48:35 +08:00
宽松相等 ECMAScript 就是这么定义的,没什么好奇怪的

ECMAScript 标准原文: http://www.ecma-international.org/ecma-262/5.1/#sec-11.9

之前回答过的一个问题: https://www.zhihu.com/question/46943112/answer/122096589
mcfog
2018-01-23 10:55:44 +08:00
还有 (a === 1 && a === 2 && a === 3) 也不是不行呢
attackonFourier
2018-01-23 11:06:16 +08:00
var i=0;
var a = {
valueOf:()=>[1,2,3][i++]
}
a==1 && a==2 && a==3 //true
ranleng
2018-01-23 11:09:41 +08:00
我那天 Google 推送给我的链接 讲的就是 (a == 1 && a == 2 && a == 3) === true

const a = {
num :0,
valueOf: function(){
return this.num += 1
}
}

console.log(a == 1 && a == 2 && a == 3)
woodensail
2018-01-23 11:14:16 +08:00
Object.defineProperty(window,'a',{get(){window._a=window._a||0;return ++window._a}});
lihongjie0209
2018-01-23 11:18:17 +08:00
jser 玩的开心就好
ZhLTE
2018-01-23 11:19:49 +08:00
第二个能打印出来吗 为啥。。
ZhLTE
2018-01-23 11:24:27 +08:00
@ZhLTE #11 看了原帖 明白了。。但是觉得这不是特性而是 bug
silov
2018-01-23 12:48:41 +08:00
最好的语言 PHP,让 $a = TRUE; 就行了。。。
azh7138m
2018-01-23 12:53:39 +08:00
@ranleng valueOf 修改对象,你要觉得这操作没问题,那我无话可说
hazyzh
2018-01-23 13:07:46 +08:00
@ZhLTE 哈哈 三胞胎长得像而已
jsdfzongkai
2018-01-23 13:14:15 +08:00
@LeungJZ 其实很简单,这三个 a 不是一个 a,你可以试试英语 a 跟俄语 a
ranleng
2018-01-23 13:20:27 +08:00
@azh7138m 其实不是很懂 js. 这个是上次 Google 推送给我的文章里的代码..
notreami
2018-01-23 13:24:37 +08:00
Java 笑而无语。
w3sy
2018-01-23 13:52:58 +08:00
很正常的东西,非要找别扭 JS 拦不住你
Jefftam
2018-01-23 14:03:41 +08:00
@w7938940 一看就是错误的写法..还笑...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/425127

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX