阅读 61

JavaScript数据类型转换小结

在了解数据类型转换之前,需先弄清楚两点:

  • 数据类型是什么?由谁向谁转换?
  • 转换的规则是什么?

类型转换又分显式类型转换隐式类型转换

显式类型转换是指需我们主动去转换,隐式类型转换是指浏览器内部自动完成转换。

数据类型

最新的ECMAScript标准定义了7种数据类型

原始类型

Boolean、Null、Undefined、Number、String、Symbol(ES6新增)

对象(引用类型)

Object

类型转换

显式类型转换

显式类型转换是指主动调用一些函数进行类型转换

用于类型转换的函数有:

  • Number()
  • String()
  • Boolean()

Number()

原始类型转换的规则:

  • 数值:转换后还是原来的值
  • 字符串:如果可以被解析为数值,则转换为相应的数值,否则得到NaN。空字符串转为0
  • 布尔值:true转成1,false转成0
  • undefined:转成NaN
  • null:转成 0

对象类型转换的规则:

  • 先调用对象自身的valueOf方法,如果该方法返回原始类型的值(数值、字符串和布尔值),则直接对该值使用Number方法,不再进行后续步骤
  • 如果valueOf方法返回复合类型的值,再调用对象自身的toString方法,如果toString方法返回原始类型的值,则对该值使用Number方法,不再进行后续步骤
  • 如果toString方法返回的是复合类型的值,则报错

字符串转为整数数值,更常用parseInt():

  • 第一个字符不是数字或负号,返回NaN
  • 第一个字符是数字或负号,继续解析后面的字符直到遇到非数字字符,返回前面有效数字字符的数值
  • 第一个字符是数字符,并且和后面的字符形成有效的整数格式,则返回对应十进制的数值。比如“0xA”为十六进制,结果返回10

字符串转为浮点数值,常用parseFloat():

  • 第一个小数点可被解析,后面的小数点则会忽略
  • 忽略前导的零

String()

原始类型转换的规则:

  • 数值:转为相应的字符串
  • 字符串:转换后还是原来的值
  • 布尔值:true转为"true",false转为"false"
  • undefined:转为"undefined"
  • null:转为"null"

对象类型转换的规则:

  • 先调用toString方法,如果toString方法返回的是原始类型的值,则对该值使用String方法,不再进行以下步骤
  • 如果toString方法返回的是复合类型的值,再调用valueOf方法,如果valueOf方法返回的是原始类型的值,则对该值使用String方法,不再进行以下步骤
  • 如果valueOf方法返回的是复合类型的值,则报错

String()与toString():

  • 数值、布尔值、对象和字符串都有toString(),而null和undefined没有该方法
  • 如果String()里的参数的值为数值、布尔值、对象和字符串,会调用toString()

Boolean()

数据类型

转为true

转为false

Boolean

true

false

String

任意非空字符串

" "(空字符串)

Number

任何非零数字值

0和NaN

Object

任何对象

null

Undefined

undefinded

隐式类型转换

隐式类型转换是指程序自动完成转换。

进行隐式类型转换的条件有:

  • 四则运算
  • 判断语句
  • typeof

隐式类型转换的规则和显示类型基本一致,只是把转换的过程放在后台进行。


四则运算:

操作符:++ 、--

规则:任何类型转换成数值,再进行加减操作


操作符:+ - * / %

规则:非数值类型调用Number()转换为数值类型,再进行四则运算

特殊情况:当操作符为+,且临近的变量的数据类型为字符串时,左右两边的变量均转换为字符串类型,然后将两个字符串拼接成一个字符串

判断语句:

if语句里的参数变量会转换为Boolean类型,然后再进行判断


typeof