对于a 可以同时 == 1 && == 2 && == 3吗的个人详解

类型转换时的劫持
  首先我们要知道,JS类型转换只有以下3种情况,分别是:

  • 转换为布尔值
  • 转换为数字
  • 转换为字符串

转换为原始类型

其算法如下:

  1. 如果已经是 原始类型,则返回当前值;
  2. 如果需要转 字符串 则先调用toString()方法,如果此时是 原始类型 则直接返回,否则再调用valueOf()方法并返回结果;
  3. 如果不是 字符串,则先调用 valueOf()方法,如果此时是 原始类型 则直接返回,否则再调用toString()并返回结果;
  4. 如果没有 原始类型 返回,则抛出 TypeError类型错误;

答案如下:

 1 ==会进行隐式类型转换
 2 
 3 var a = {
 4     arr : [3,2,1],
 5     toString () {
 6         return this.arr.pop()
 7     }
 8 }
 9 if (a == 1 && a == 2 && ab == 3){
10     console.log('成功了')
11 }
12 
13 
14 var b = {
15     arr : [3,2,1],
16     toString () {
17         return this.arr.pop()
18     }
19 }
20 if (b == 1 && b == 2 && b == 3){
21     console.log('成功了')
22 }
23 
24 var c = {
25   i: 1,
26   toString() {
27     return c.i++;
28   }
29 }
30 
31 if( c == 1 && c == 2 && c == 3 ) {
32   console.log(1);
33 }
34 
35 
36 Object.defineProperty(window, 'd', {
37   get: function() {
38     return this.value = this.value ? (this.value += 1) : 1;
39   }
40 });
41 if (d == 1 && d == 2 && d == 3){
42     console.log('成功了')
43 }
原文地址:https://www.cnblogs.com/chailuG/p/11215554.html