Статья будет переводом вопроса с StackOverflow (так-же есть версия и на Answer-ID).
Может ли (a == 1 && a == 2 && a == 3) равняться true в языке программирования JavaScript?
Это вопрос получен при попытке устроиться на работу. Это было 2 недели назад, и я пробовал найти ответ. Знаю что при работе не будет встречаться такой код, но задаю вопрос ради интереса.
Топ ответов:
Лучший ответ.
1 2 3 4 5 6 7 8 9 10 |
const a = { i: 1, toString: function () { return a.i++; } } if(a == 1 && a == 2 && a == 3) { console.log('Hello World!'); } |
Другие варианты которые тоже работают:
1 2 3 4 5 6 |
var a_ = 1; var a = 2; var _a = 3; if(a_==1 && a== 2 &&_a==3) { console.log("Why hello there!") } |
1 2 3 4 5 6 7 8 9 10 |
var i = 0; with({ get a() { return ++i; } }) { if (a == 1 && a == 2 && a == 3) console.log("wohoo"); } |
1 2 3 |
a = [1,2,3]; a.join = a.shift; console.log(a == 1 && a == 2 && a == 3); |
1 2 3 4 5 6 7 8 9 10 11 12 |
with({ get a() { return Math.floor(Math.random()*4); } }){ for(var i=0;i<1000;i++){ if (a == 1 && a == 2 && a == 3){ console.log("after "+(i+1)+" trials, it becomes true finally!!!"); break; } } } |
1 2 3 4 5 6 7 8 9 |
var val = 0; Object.defineProperty(window, 'a', { get: function() { return ++val; } }); if (a == 1 && a == 2 && a == 3) { console.log('yay'); } |
1 2 3 4 5 6 7 8 9 10 |
var a = { r: /\d/g, valueOf: function(){ return this.r.exec(123)[0] } } if (a == 1 && a == 2 && a == 3) { console.log("!") } |