js 关系操作符、相等操作符

一、关系操作符【小于(<)、大于(>)、小于等于(<=)和大于等于(>=)】

ECMAScript 中,当关系操作符的操作数使用了非数值时,也要进行数据转换或完成某些奇怪的操作。以下就是相应的规则。
 如果两个操作数都是数值,则执行数值比较。
 如果两个操作数都是字符串,则比较两个字符串对应的字符编码值。
 如果一个操作数是数值,则将另一个操作数转换为一个数值,然后执行数值比较。
 如果一个操作数是对象,则调用这个对象的valueOf()方法,用得到的结果按照前面的规则执行比较。如果对象没有valueOf()方法,则调用toString()方法,并用得到的结果根据前面的规则执行比较。
 如果一个操作数是布尔值,则先将其转换为数值,然后再执行比较。

比如下面这个例子:
var result = "Brick" < "alphabet"; //true
字母B 的字符编码为66,而字母a 的字符编码是97
var result = "Brick".toLowerCase() < "alphabet".toLowerCase(); //false
var result = "23" < "3"; //true
因为两个操作数都是字符串而字符串比较的是字符编码("2"的字符编码是50,而"3"的字符编码是51)
var result = "23" < 3; //false
此时,字符串"23"会被转换成数值23,然后再与3 进行比较。在比较数值和字符串时,字符串都会被转换成数值,然后再以数值方式与另一个数值比较。如果那个字符串不能被转换成一个合理的数值呢?比如:
var result = "a" < 3; // false,因为"a"被转换成了NaN
由于字母"a"不能转换成合理的数值,因此就被转换成了NaN。根据规则,任何操作数与NaN 进行关系比较,结果都是false。于是,就出现了下面这个有意思的现象:
var result1 = NaN < 3; //false
var result2 = NaN >= 3; //false

二、相等操作符

1. 相等和不相等

如果两个操作数相等(==),则返回true。如果两个操作数不相等(!=),则返回true。这两个操作符都会先转换操作数(通常称为强制转型),然后再比较它们的相等性。
在转换不同的数据类型时,相等和不相等操作符遵循下列基本规则:
 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值——false 转换为0,而true 转换为1;
 如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值;
 如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类型值按照前面的规则进行比较;

下表列出了一些特殊情况及比较结果:


2. 全等和不全等

除了在比较之前不转换操作数之外,全等和不全等操作符与相等和不相等操作符没有什么区别。全等操作符由3 个等于号(===)表示,它只在两个操作数未经转换就相等的情况下返回true。例如:
var result1 = ("55" != 55); //false,因为转换后相等
var result2 = ("55" !== 55); //true,因为不同的数据类型不相等
注意:null == undefined 会返回true,因为它们是类似的值;但null === undefined 会返回false,因为它们是不同类型的值

版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/qq_36584352/article/details/79714975

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值