javascript类型转换

javaScript

js基础知识,类型之间的显示转换与隐形转换。

ECMAScript标准数据类型

  • 原始类型:String、Number、Boolean、Undefined、null、Symbol
  • 对象:Object

显示类型转换

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

  • 对象类型转换
    先调用对象自身的valvueOf方法,如果该方法返回原始类型的值(数值、字符串、布尔值),则直接对该值使用Number方法,不在进行后续步骤。

    如果valueOf方法返回复合类型的值,在调用对象自身的toString方法,如果toString方法返回原始类型的值,则对该值使用Number方法,不再进行后续步骤。

    如果toString方法返回的是复合类型的值,则报错。

2)、String函数
  • 原始类型
    字符串:转换后还是原来的值
    数值:转为相应的字符串
    布尔值:true转为"true",false转为"false"
    undefined:转为"undefined"
    null:转为"null"
    symbol: 转换报错

  • 对象类型转换
    先调用toString方法,如果toString方法返回的是原始类型的值,则对该值使用String方法,不再进行以下步骤。

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

    如果valueOf方法返回的是复合型的值,则报错。

3)、Boolean函数
  • 原始类型转换
    (undefined、null、-0、+0、NaN、’’) 转换成false,symbol转换报错,其他一律为true。

隐形转换

  • 四则运算 (+、-、*、/)。
  • 判断语句 (if、三目)。
  • Native调用 (alert、console)会转换成字符串。

有点意思的题目

[] + [] // ? [] + {} // ? {} + [] // ? {} + {} // ? true + true // ? 1 + {a:1} // ?

PS: [] toString() 返回的是 " “,如果{}(空对象)在前面,而在后面时,前面(左边)那个运算元会被认为是区块语句而不是对象字面量。所以{} + []相当于+[]语句,也就是相当于强制求出数字值的Number([])运算,相当于Number(”")运算,最后得出的是0数字。

扩展文章