== 隐式转换规则理解

148 阅读1分钟
var a= ?  //?号位置 怎么写才会输出 true

console.log( 
    a == 1 && 
    b == 2 && 
    c == 3);

一、首先需要了解 == 隐式转换的规则

1、特殊情况

    undefined == null
    NaN != NaN

2、== 两侧类型相同 比较值

3、类型不同

(1)== 两侧 均为原始类型 转换为数字进行比较

(2)一侧为原始类型,一侧为对象,对象会转换成原始类型后进行比较。

二、对象转换成原始类型的步骤:

(1)先调用 valueOf方法 若无法转换成原始类型,则在调用toString方法

注:原始类型:number(整数、小数、NaN) string(字符串) null undefined boolean symbol(独一无二的值)

js 自动转换

         string-->boolean // 除了空字符串 全部是true
         number-->boolean  //除了0和NaN  全部是true
         对象   //所有对象都是true
         null和unfined //是 false
         

上述的解题方法:

var a = {
    n:0
    valueOf:function() {
       return this.n++ 
    }
}

每次进行比较的时候 都会调用valueOf方法 依次返回 1,2,3......