js中a + 1 < a等于true,(a ==1 && a== 2 && a==3) 等于 true如何实现
先说a + 1 < a
1 const a = { 2 i: 1, 3 valueOf: () => { 4 if (a.i === 1) { 5 return a.i++; 6 } 7 return a.i+2; 8 } 9 } 10 console.log(a + 1 < a); // true
原理:valueOf第一次返回一个值,取过一次之后返回另一个值,这里用个变量判断也行,如下:
1 let flag = true; 2 const a = { 3 i: 1, 4 valueOf: () => { 5 if (flag) { 6 flag = false; 7 return a.i; 8 } 9 return a.i+2; 10 } 11 } 12 console.log(a + 1 < a); // true
如果 a 加的数字小于 1,可以这么写
1 const a = { 2 i: 1, 3 valueOf: () => { 4 return a.i++; 5 } 6 } 7 console.log(a + 0.9 < a); // true
以上是a + 1 < a的解法
再说(a ==1 && a== 2 && a==3)等于true的实现,其实跟上面逻辑差不多,如下:
const a = { i: 1, valueOf: () => { return a.i++; } } console.log(a ==1 && a == 2 && a == 3); // true