Как это работает? Как а меняется вообще?
const a = {
i: 1,
toString: function () {
return a.i++;
}
}
if(a == 1 && a == 2 && a == 3) {
console.log('Hello World!');
}
Как это работает? Как а меняется вообще?
const a = {
i: 1,
toString: function () {
return a.i++;
}
}
if(a == 1 && a == 2 && a == 3) {
console.log('Hello World!');
}
При сравнении объекта с примитивом происходит неявное преобразование объекта с помощью метода valueOf(). Если его нет, используется toString() см.
При преобразовании возвращается текущее значение свойства i с пост-инкрементом, т.е. возвратив 1, i становится 2. И так далее.
Ниже пример, который дает результат как в оригинале, несмотря на измененный метод toString - используется valueOf(). Если закомментировать valueOf(), то результат будет другой.
const a = {
i: 1,
toString: function () {
return 5;
}
,
valueOf: function () {
return a.i++;
}
}
if (a == 1 && a == 2 && a == 3) {
console.log('Hello World!');
}