JavaScript——数据类型转换(显式和隐式)

350 阅读4分钟

显式数据类型转换

Number()

转化成数字number

//特殊
Number(undefined)—— NaN
Number(null)—— 0

parseInt()

  • 转换成整数number(从数字位到非数字位截止)
  • 取整 不四舍五入

parseFloat()

  • 转换成浮点数number
  • 从数字位到第一个不是点或者非数字位截止

String()

转换成字符串string

toString()

用法:str.toString()

  • undefined和null不能用toString()
  • toString(进制) 将转换成什么进制的

Boolean()

转换成布尔值Boolean

隐式数据类型转换

内部调用的都是显式类型转换的方法

递增递减运算符(前置、后置)的隐式转换规律

简言之,

++/--自增自减       +/-正负
先将参数进行Number()方法

具体如下:

  1. 如果包含的是有效数字字符串或者是有效浮点数字符串,则会将字符串转换(Number())为数值,再进行加减操作,返回值的类型是:number类型。

  2. 如果不包含有效数字字符串,则会将字符串的值转换为NaN,返回值的类型是:number类型。

  3. 如果是boolean类型,则先会把true或者false转换为1或者0,再进行加减操作,返回值的类型是:number类型。

  4. 如果是null类型,则先会把null转换为0,在进行加减操作,返回值的类型是:number类型。

  5. 如果是undefined,则先会把undefined转换为NaN,再进行加减操作,返回值的类型是:number类型。

  6. 如果是对象,则先会通过对象的valueOf()方法,进行转换,如果返回的是NaN,调用toString()方法,在进行前面的操作,返回值的类型是:number类型。(注:空数组[]会返回0,在进行加减操作,空对象则会返回NaN)。

四则运算 + - * / %

  • 加法运算符+是双目运算符,只要其中一个是String类型,表达式的值便是一个String。
  • 对于其他的四则运算,只有其中一个是Number类型,表达式的值便是一个Number。
  • 对于非法字符的情况通常会返回NaN
1.字符串加数字,数字就会转成字符串。
2.数字减字符串,字符串转成数字。如果字符串不是纯数字就会转成NaN。字符串减数字也一样。两个字符串相减也先转成数字。
3.乘,除,大于,小于跟减的转换也是一样。

关系操作符的隐式转换规律

  1. 如果两个操作值都是数值,则直接比较大小。
  2. 如果两个操作值都是字符串,则字符串进行其Unicode编码进行比较。
  3. 如果一个操作值是数值,则另一个值转换为数值进行比较。
  4. 如果一个操作值是对象,则调用对象的valueOf()和toString()方法,然后再进行上述比较。 5.如果一个操作值是布尔值,则将布尔值转换为数值再进行比较。 (注:NaN和任何值都不相等,包括自己,同时它与任何类型比较都会返回false。)

相等操作符==和===的隐式转换规律:

  1. 布尔值、字符串和数值进行比较,会先将其转换为数值再进行比较。
  2. null和undefined比较是相等的,但不是全等的。
  3. NaN与任何值都不相等,都会返回false。
关于==
1.undefined等于null
2.字符串和数字比较时,字符串转数字
3.数字为布尔比较时,布尔转数字
4.字符串和布尔比较时,两者转数字

逻辑操作符中的隐式转换规律
(注:只有undefined、null、NaN、0、空字符串会被转换为false,其余都为true):

逻辑操作符一般用于语句判断中。通过判断结果返回的值进行后面的语句操作。

  1. 逻辑非(!)操作符:首先会通过Boolean()函数将其操作值转换为布尔值,然后求反。
  2. 逻辑与(&&)操作符:如果第一个值经过Boolean()函数转换后为true,则返回第二个操作值,否则返回第一个操作值。如果有一个操作值为null这返回null,如果有一个操作值为undefined,则返回undefined,如果有一个值为NaN,则返回NaN。
  3. 逻辑或(||)操作符:如果第一个值经过Boolean()函数转换为false,则返回第二个操作值,否则返回第一个操作值。(注:逻辑操作符的运算为短路逻辑运算:前一个条件已经能够得出结果后续条件不再执行!)

判断语句

判断语句中的判断条件需要是Boolean类型,所以条件表达式会被隐式转换为Boolean。其转换规则同Boolean的构造函数。比如:

var obj = {};
if(obj){
    while(obj);
}