Js学习之----隐式类型转换

一、类型转换的各种情况:

1、遇到运算符+、-、*、/的时候:

  当遇到-、*、/的时候,会将运算符前后都转换为number类型;

  当遇到+的时候,会将运算符前后转换为字符串类型,即字符串拼接。

在实际编程中,想要将一个字符串变成数字,可以将其减去0;

若想要将数字变成字符串,可以将其加上空字符串。

2、遇到逻辑运算&&、||、!的时候:

逻辑运算符前后的表达式会被转换为truefalse。

 

  如果是number类型,0为false,其他都为true;

  如果是string类型,空字符串为false,其他都为true;

  null和undefined都转换为false。

上面!window.x为true是因为:window.x未定义,即undefined,所以非了之后,就为true。

3、判断语句中:

会试图将表达式转换为true或false。

 

  如果是number类型,0为false,其他都为true;

  如果是string类型,空字符串为false,其他都为true。

4、最后一种情况就是在进行等于运算“==”的时候会有类型转换:(第二部分会详细说明=、==、===的区别)

二、“=”、“==”和“===”:

“=”就是把它右边的值赋给左边的变量;(这个每个人都知道,但是将其列出来就是为了使脑子清晰)

 

“==”是相等操作符,对应的是不相等操作符:“!=”。相等和不相等操作符的特点就是:先转换,再比较。

规则如下:

1、先看字符串,数值和布尔值这三种排列组合的情况:

  如果两边都是同一种类型,就看是不是一样;

  如果有一边的操作数是布尔值,则将true转换为1,false转换为0:

  如果有一边的操作符是字符串,则用Number()方法将字符串转换为数值,再比较:

 

由上面的实验可以得到:空字符串会转为0,不代表非空字符串会转为1。(避免惯性思维)

2、再来看特殊的undefinednullNaN

  null和undefined是相等的,而且不管是它俩之间相互比较还是它们中任何一个和别的比较,它俩都不会转换为其它任何值

  NaN和任何值都不相等,包括它本身:

3、最后来看操作数为对象的情况:

  一个操作数是对象,另一个不是对象时:调用对象的valueOf()方法得到对象的基本类型值,再进行比较:

 

  如果两个操作数都是对象,则看它们是否指向同一个对象,是为true,否为false。

 

“===”“!==”称为全等和不全等:这两个操作符在比较时不进行类型转换

  如果两个操作数在未经类型转换的情况下就相等,则返回true,其余都返回false。

  需要注意的是null和undefined是不全等的,因为它们是不同类型的值:

实际应用中,==和===怎么选择:

 if语句和双否定【!!】

在判断语句中,除了用null,还能用双否定

 

 注意:空数组或者对象也为------“是”

 

所以,

判断数组是否为空,需要用Arr.length是否为0

判断对象是否为空,需要用Object.keys(obj).length是否为0

 

 

 

 

 

 

(ps:如有错误,请大家指正,我会虚心更正,大家共同进步)

 

posted @ 2018-01-09 01:00  程序员冒冒  阅读(322)  评论(0编辑  收藏  举报