javascript开发过程中,强制类型转换一般发生在条件判断和==运算符。其他情况,发生的类型转换(与这两种情况也是基本类似,属于万变不离其宗的范畴),暂不讨论。

== 双等运算符

考虑代码: a == b

如果a、b的类型一致,则不涉及任何强制类型转换的功能,不在这里讨论。

1、 基本类型值 null == undefined //true

  在双等运算符两边如果是undefined 和 null,则返回的结果为true。也就只有在==的时候,null和undefined相等,除此之外,都不存在这种情况。

2、a和b两者的类型,一个为number类型,一个为string类型

  则将字符串类型隐式执行 Number(字符串),然后再判断是否相等。即判断ToNumber(a) == b  或者 a == ToNumber(b);

3、其中一个是布尔类型,另一个是其他类型

  首先将布尔值类型,装换为数字类型,再参与比较,即执行 ToNumber(a)== b 或者 a == ToNumber(b);

  可以看到,目标都是往数字类型转换,再参与两者的比较。

4、对象和非对象之间的比较

  非对象主要是指字符串和数字类型,(布尔类型值会自动转换为数字类型的),这种情况下,会将对象类型的值,执行ToPrimitive,转换为基本类型值,再参与==运算符的判断。

 

  可以看出,在执行==运算比较的时候,强制类型转换的方向都是数字类型。

 

条件判断语句:

    if (...)   条件判断表达式 

  for(;...;) for循环语句中的第二条语句

  while(...)  循环中的条件判断表达式

  ...? :  三目运算符的条件判断表达式

  && ||  逻辑运算符

这几种情况下,也会产生强制类型转换。会将非布尔值隐式转换为布尔值,然后参与条件判断。其中关于逻辑运算符,在前文《逻辑运算符——逻辑与&&、逻辑或||》做过介绍,请跳转查阅。

项目开发中,可能比较多的涉及到的强制类型转换就是这些,其他还有一些请参阅专业书籍。本文主要参考的是《你不知道的javascript(中)》。

posted on 2017-01-09 13:17  烛火星光  阅读(708)  评论(0编辑  收藏  举报