Адрес этот вопрос: https://github.com/YvetteLau/Step-By-Step/issues/9
== оператор неявного преобразования.
- Объект
== Попытки оператора по методу valueOf и ToString преобразования объекта к исходному значению (значение типа строки или числовой).
const a = {
i: 1,
// valueOf 也可达到相同效果
toString: function () {
return a.i++;
}
}
a == 1 && a == 2 && a == 3; // true
- Массив
для массивов объектов, метод ToString возвращает строку из ToString каждого элемента в массиве () Возвращает значение с помощью вызова метода Join) разъема ((разделенного запятой) компонентов.
var a = [1,2,3];
a.join = a.shift;
a == 1 && a == 2 && a == 3; // true
- Символ ,
когда объект Символ преобразуется к значениям исходного типа, метод ToPrimitive вызовы, возвращает исходное значение соответствующего типа объекта.
let a = {
[Symbol.toPrimitive]: ((i) => () => ++i) (0)
};
a == 1 && a == 2 && a == 3; // true
- Изменить окно методы GET
var val = 0;
Object.defineProperty(window, 'a', {
get: function() {
return ++val;
}
});
a == 1 && a == 2 && a == 3; // ture
- С использованием ключевых слов
эммм ... с ключевыми словами , как редко
var i = 0;
with({
get a() {
return ++i;
}
}) {
a == 1 && a == 2 && a == 3; // true
}
Ссылка:
Воспроизводится в: https: //www.jianshu.com/p/a74223e37e3b