:この質問に対処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から文字列を返す配列の各要素は、()()メソッドコネクタ(カンマで区切られた)コンポーネントを結合呼び出すことによって値を返します。
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
- キーワードを使用すると
emmm ...めったに使われないようなキーワードで
var i = 0;
with({
get a() {
return ++i;
}
}) {
a == 1 && a == 2 && a == 3; // true
}
参考:
ます。https://www.jianshu.com/p/a74223e37e3bで再現