类型转换时的劫持
首先我们要知道,JS类型转换只有以下3种情况,分别是:
- 转换为布尔值
- 转换为数字
- 转换为字符串
转换为原始类型
其算法如下:
- 如果已经是 原始类型,则返回当前值;
- 如果需要转 字符串 则先调用toString()方法,如果此时是 原始类型 则直接返回,否则再调用valueOf()方法并返回结果;
- 如果不是 字符串,则先调用 valueOf()方法,如果此时是 原始类型 则直接返回,否则再调用toString()并返回结果;
- 如果没有 原始类型 返回,则抛出 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 }