JavaScript基础:值的比较

参考:值的比较

在看完这一节内容后,算是做一个总结工作:

值的比较

首先,数学中的很多比较运算符,在JavaScript中如下:

  • 大于 / 小于:a > b,a < b。
  • 大于等于 / 小于等于:a >= b,a <= b。
  • 检查两个值的相等:a == b,请注意双等号 == 表示相等性检查,而单等号 a = b 表示赋值。
  • 检查两个值不相等:不相等在数学中的符号是 ≠,但在 JavaScript 中写成 a != b。
值的比较的结果一定都是Boolean类型的

所有比较运算符均返回布尔值:

  • true;
  • false;
    在这里插入图片描述

和其他类型的值一样,比较的结果可以被赋值给任意变量:
在这里插入图片描述

比较时符号两边类型不一样,比较规则不一样
两边都是数字:

比如下面这种:
在这里插入图片描述
比较的规则就按照数字的大小来比较。

两边都是字符串时:

字符型的字符串
在这里插入图片描述
按照首位字符的大小来比,首位字符大的就大,首位字符相等,接着比较下一个字符。
每一个字符比较时是按照字符的Unicode编码顺序比较的。
比如'Z'>'A'
'Z': Unicode编码:U+005A [后面是四个16进制位]
’A’:Unicode编码: U+0041
005A > 0041按照位置比较就行,或者你转为10进制来比较。

数字类型的字符串:

alert('3'>'12'); //true

这里首位首先比较,'3''1' 进行比较,都是字符串,目前我也不清楚是不是直接按照数字3和1比较,因为在unicode中没有找到字符3,只有数字3。

或者按照我们自己的理解,单个的字母越往后就越大,数字类型的字符呢,3肯定是大于1.

两边的类型不相同

不相同的类型比较时,还需要看比较的时候存不存在nullundefined这两个特殊类型:

当不存在null和undefined这两个特殊类型时:

比较会把两边都转为数字类型,再进行比较:

alert( '2' > 1 ); // true,字符串 '2' 会被转化为数字 2
alert( '01' == 1 ); // true,字符串 '01' 会被转化为数字 1

alert( true == 1 ); // true 转为数字1
alert( false == 0 ); // true 转为数字0
当存在null和undefined这两个特殊类型时:

当使用非严格相等 == 比较二者时

JavaScript 存在一个特殊的规则,会判定它们相等。它们俩就像“一对恋人”,仅仅等于对方而不等于其他任何的值(只在非严格相等下成立)。

//在含有null和undefined时,相等性检查,她两只能互相相等,不等于其他任何东西
alert( null == undefined ); // true

alert( null == 0 ); // (2) false

alert( undefined == 0 ); // false (3)

//相等性检查时,只有彼此互相相等。

当使用数学式或其他比较方法 < > <= >= 时:

null/undefined 会被转化为数字:null 被转化为 0,undefined 被转化为 NaN。

//进行其他方式比较,null被转为0,
alert( null > 0 );  //  false
alert( null >= 0 ); //  true


//但是进行相等性比较时,null只等于undefined,
alert( null == 0 ); // false

undefined 不应该被与其他值进行比较:

//undefined 在比较中被转换为了 NaN,而 NaN 是一个特殊的数值型值,它与任何值进行比较都会返回 false。
alert( undefined > 0 ); // false (1)
alert( undefined < 0 ); // false (2)

//返回 false 是因为这是一个相等性检查,而 undefined 只与 null 相等,不会与其他值相等
alert( undefined == 0 ); // false (3)
严格相等

由于普通的相等性检查==在比较时,如果不含有nullundefined时,比较都会转为数字再比较。

//false转为0,他们相等
alert( 0 == false ); // true

//空字符串转为0,false转为0,两者相等
alert( '' == false ); // true

//由于它们都会转为false再比较,所以无法区分出0,和false

严格相等运算符 === 在进行比较时不会做任何的类型转换。

换句话说,如果 a 和 b 属于不同的数据类型,那么 a === b 不会做任何的类型转换而立刻返回 false。

//严格相等不会进行类型转换,两者必须完全相等:类型一样,值一样
alert( 0 === false ); // false,因为被比较值的数据类型不同

同样的,与“不相等”符号 != 类似,“严格不相等”表示为 !==

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值