类型转换(关系运算)

#类型转换(关系运算符)

< > <= >= != !== == === (六种)

关系运算符的具有返回值,返回值是布尔类型,在对两个值进行比较时,可能需要进行类型转换

比较运算常用的地方:条件判断语句,函数、循环、分支语句

  • 比较的两边数据类型相同:

  • 都是字符串时: 将两边的字符转换成Unicode编码进行比较

  • 都是数字: 进行值的大小比较即可

  • 两边都是数组和对象(或者说两边都是引用类型): false ,一定是false,哪怕里面放的东西一样,但引用类型的地址不相同,结果一定不同

console.log( [] == [])  //false
console.log({a:1} == {a:1}) // false
  • 都是布尔值: 比就完了,难道true还能等于false吗

  • 两边的类型不相等:

  • 先判断两边是不是字符串,有一侧不是字符串且两边的类型不同时,优先转换成数值

console.log(1 == "1") // true
console.log(true == "true")  // false  
console.log(true == "1") // true
console.log(["a"] == "a")  // true 
  • 当涉及到引用类型时,引用类型会先进行一步隐式转字符串,转换后再进行一次比较,如果另一边是字符串就进行字符串比较,不是则继续将两边转为数值比较
console.log([1] == "1") // true 
console.log([1] == 1)  // true 

NaN Undefined Null !

基本的比较规则如上,下面在来记忆几个特例

  • NaN : 任何数据类型的值都不等于NaN,且NaN本身也不相等
console.log(NaN == Number("a")) //false
console.log(NaN === NaN) // false
  • 如何判断是不是NaN:

  • Object.is(value1 , value2) 他的效果和 === 是一样的 , 进行 value1 === value2 的判断,但是他可以判断NaN,不会进行隐式转换

console.log(Object.is(NaN , NaN))// true 
console.log(Object.is(Number("a") , NaN) // true
  • isNaN(value) 这里面会进行隐式转换,所有的值都隐式转换为数值,转换后如果是NaN 返回true,否则返回false
console.log(isNaN(NaN)) // true
console.log(isNaN("a")) // true
  • Number.isNaN() 这里不会进行隐式转换,只会判断里面的值是不是NaN,是就返回true

Null Undefined

console.log(null == undefined) // true 
  • ! :取反,他会将其后面的值强制转换成布尔值,并取反
  • 要注意的是在进行判断时,在转换成为布尔值时,引用类型直接转为true,不会再进行转字符串的隐式操作,还记得转换成布尔值为false的六个特例吗 false Null Undefined NaN 0 “”
  • https://blog.csdn.net/yingzi0001/article/details/132768920?spm=1001.2014.3001.5501

还有一些 “0” == [] == [“0”] ==[0] == false == 0

== ===

  • == 会有类型转换,同上面所写的
  • === : 先进行类型判断,在进行值判断,不会设计类型转换
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值