js中的比较

 

console.log(null > 0);    // false
console.log(null < 0);    // false
console.log(null == 0);   // false

console.log(null >= 0);    // true
console.log(null <= 0);    // true

 

先看看 X == Y 的规则

1.X和Y类型相同

以下是相等的内容,不存在隐式类型转换,都是true。

null == null

undefined == undefined

+0 == -0

true == true

false == false

对象的引用地址相同则相同,字符串完全相同的字符序列(长度相等且相同字符在相同位置)时返回true,

不满足以上条件的同类型元素的== 式就是false,对于NaN 来说,只要存在NaN 就一定是false。

 

2.X和Y类型不同

undefined == null 值为true  这个是规定,不存在类型转换。

X == Y,

1.X, Y 中任意一人是Boolean 类型时,把Boolean 类型的转换成数字类型进行判断。

true转成1,false转成0

2.当X Y 中一个是数字另一个是字符串,比较规则是把字符转换成数字然后在进行比较。

3.X或Y有一个是object

1)如果是对象的话,先检查是否具有valueOf 函数,如果有并且返回基本类型值,就使用该值进行强制类型转换

var obj = {
value: '123',
valueOf() {
    console.log("valueOf")
    return this.value
  }
}
console.log(obj == 123)  // true

2)如果没有ValueOf,或者ValueOf 返回的不是原始值。继续寻找toString 函数。

var obj = {
    value: '123',
    valueOf() {
        console.log("valueOf")
        return {}
    },
    toString() {
        console.log('toString')
        return this.value
    }
}
console.log(obj == 123)  // true

3)不符合上面规矩的,一律返回false,所以null == 0 的值是false

== 总结,除了类型相同不存在隐式类型转换外,还有一个特殊的就是 undefined == null,其他的内容最终都是转换到数字层面进行比较。

 

X >= Y  ,X <=Y, X < Y, X >Y 的规则

1.X 和 Y 都是数字直接比较

2.X 和 Y 都是字符串比较ASCII码

3.只要存在NaN 就一定是false

4.一个数字一个字符串在数字层面比较

5.如果有对象,使用Number(obj)转化再比较

null == undefined 是true,但是null>=undefined 或者 null <= undefined 都为false,因为Number(null) 是 0,Number(undefined)为NaN,只要存在NaN就一定是false。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值