隐式转换的复习—隐式转换细则

隐式转换

当运算符在运算时,两边数据不统一,编译器会自动将两边数据进行数据类型转换成统一的再计算。 

常见的隐式转换:

逻辑语句的类型转换:当使用if、while、for 时,隐式转换为布尔值;
逻辑表达式:
! 逻辑非,隐式转换为布尔值,并取反,!!两次逻辑非,隐式转换为布尔值;
|| 和 && 会将非布尔值操作数,隐式转换为布尔值,再判断;
算术表达式
递增递减++ --,一元加减 +a、- a(结果的符号取反),二元 -,乘法,除法,求模,隐式转换为 Number;
+运算符:


不同类型间的转换规则
如果其中一个操作符是对象,则进行对象到原始值的转换(这里是通过 toString 方法获取);
进行了对象到原始值的转换后,如果其中一个操作数是字符串,则另一个操作数也会转换成字符串,再进行连接;
否则两个操作数都转换为数字(或者NaN),然后进行加法操作。
具体使用时,需要考虑加法的结合性对运算顺序的影响

== 运算符:
注意:尽管 if 语句会隐式转换为布尔值,但 == 运算符并不会自动得将操作数转换为布尔值。
不同类型间的转换规则
1、null == undefined 为true,和其他的比较都为false;

2、如果一个值是数字,另一个是字符串,先将字符串转换为数字,再进行比较;
      a. NaN 与所有值都不相等,包括它自己,可使用 isNaN() 来判断一个值是否是数字;
 

console.log(NaN=="dsdd");  // false 字符串"dsdd"转为数字为NaN,但是NaN != NaN

b. 数字间比较,以0开头是8进制;

console.log(012==10);  // true
console.log(099==99);  // true 这种情况是因为八进制中不可能出现9,所以看成一个十进制

c.如果一个值是布尔值,转换为数字再比较;

true == '2'  // false, 先把 true 变成 1, '2' 变成 2

3、如果一个值是对象,另一个是数字或字符串或 symbol,将对象转换为原始值再比较(调用 valueOf 方法);
a. 注意,同类型比较时,对象间除非指针一样,否则它就是两个不同的对象; 

4、其他不同类型比较均不相等;

原文链接:https://blog.csdn.net/Dreamy_LIN/article/details/111595760

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值