JS中会出现数据类型转换的操作符

2 篇文章 0 订阅

加法操作

加法操作符遵循一定的规则,如果两个操作符都是数值会进行常规的假发计算,如果不是,按照如下规则进行计算:
1. 如果有一个操作数是NaN, 则结果是NaN;
2. 如果是Infinity 加 Infinity,结果是 Infinity;
3. 如果是 - Infinity 加 - Infinity,结果是 - Infinity;
4. 如果是 Infinity 加 - Infinity,结果是 NaN;
5. 如果是 +0 加 +0,结果是 +0;
6. 如果是 -0 加 -0 ,结果是 -0;
7. 如果是 +0 加 -0, 结果是 +0;
8. 如果有操作符是字符串,那么遵循如下规则:
9. 如果两个都是字符串,将两个字符串进行拼接;
10. 如果只有一个操作符是字符串,则将另一个操作数转换为字符串,再将两个拼接;
11. 如果有一个操作符是对象、数值或布尔值,调用他们的toString()方法获得相应的字符串值, 再进行字符串拼接。对于undefined和null 分别调用String()函数取得字符串“undefined”和“null”;

减法操作

同加法操作符类似,减法操作符也有一些规则要遵循:
1. 如果两个操作符都是数值,则常规操作;
2. 如果有一个操作数是NaN,结果是NaN;
3. 如果是Infinity 减 Infinity,结果是 NaN;
4. 如果是 -Infinity 减 -Infinity,结果是 NaN;
5. 如果是 Infinity 减 - Infinity,结果是 Infinity;
6. 如果是 -Infinity 减 Infinity,结果是 -Infinity;
7. 如果是 +0 减 +0 ,结果是 +0;
8. 如果是 +0 减 -0,结果是 +0;
9. 如果是 -0 减去 -0,结果是 +0;
10.如果有一个操作符是字符串、布尔值、null或undefined,则先调用Number() 函数将其转换为数值,然后再根据前面规则执行减法计算。如果转换结果是NaN,则减法的结果就是NaN;
11.如果有一个操作数是对象,则调用对象的valueOf()方法以取得表示该对象的数值。如果得到的值是NaN,则结果就是NaN。如果对象没有 valueOf()方法,调用其toString()方法并将得到的字符串转换为数值。

此外,乘法和除法也会进行转换,如果其中一个操作符不是数值的情况下,后台会调用Number(),将其转换为数值再进行计算。

关系操作符

大于(>)、小于(<)、小于等于(<=)、大于等于(>=)。
关系操作符的返回值都是布尔值。在关系操作符的操作数使用了非数值时,也要进行数据转换或者遵循一些规则进行比较。具体如下:
1. 如果两个操作数都是数值,则正常比较;
2. 如果两个操作数都是字符串,则比较两个字符串对应的字符编码值(ASCII);
3. 如果一个操作数是数值,则将另一个操作数转换为数值,进行比较;
4. 如果一个操作数是对象,则调用这个对象的valueOf() 方法,结果再进行比较,如果没有这个方法则调用toString(),对结果进行比较;
如果一个操作数是布尔值,则先将其转换为数值吗,再进行比较;

  1. 在对两个字符串进行比较时,按照字符的编码值进行比较,但是所有大写字母得编码值都小于小写字母,所以为了保证结果正确,我们先将比较的两个操作数都转换为大写或小写再进行比较。
  2. 在比较两个数字字符串的时,也会按照字符编码进行比较,就会出现比较怪异的现象,比如:
    console.log(“23” < “3”) //true ,我们可以将其中一个操作数改为数值,就会得到正确的结果了。
  3. 在比较一个字符串一个数值时,按照规则会将字符串转换为数值,再进行比较,但是当字符串不能转换为一个合理的数值的时候,字符串就会被转换为 NaN ,任何操作数与 NaN 进行关系比较都会返回 false 。于是就出现了另一个有趣的现象:
    console.log( NaN < 3) //false console.log( NaN >= 3) //false
    按照常理,如果一个值不小于另一个值,那一定是大于或等于那个值。然而,这种神奇结果却是存在。

相等操作符

  1. 相等(==)和不相等(!=) 全等(===)和不全等(!==)
  2. 相等和不相等都会先转换操作数(称为强制转型),再进行比较,遵循如下规则:
  3. 如果有一个操作数是布尔值,则将其转换为数值再比较(true – 1, false – 0);
  4. 如果是字符串和数值,则将字符串转换为数值再比较;
  5. 如果一个操作数是对象,调用对象的valueOf(), 用结果进行比较;
  6. null 和 undefined 相等;
  7. 要比较相等性之前,不能将 null 和undefined 转化为其他任何值;
  8. 如果有一个操作数是NaN ,则相等操作符返回 false ,不相等操作符返回 true 。
  9. 如果两个操作数都是NaN ,相等操作符还是返回 false,因为 NaN 不等于 NaN;
  10. 如果两个操作数都是对象,判断是不是同一个对象,如果都指向同一个对象,则相等操作符返回true,否则返回 false;

特殊的判断情况

全等和不全等不会进行数据类型的转换,如果数据类型不同会,全等返回false。

以上内容摘自 Javascript高级程序设计(第三版),高清PDF下载请点击
高清非扫描版下载

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值