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