一、类型转换
js的取值非常灵活,比如:在js程序中,当js期望用一个布尔值的时候,你可以提供任意类型的值,js将根据需要自动转换类型。同样,其他类型也适用。js的类型转换分为三大类:
原始值到原始值的转换
原始值到对象的转换
对象到原始值的转换
1、原始值到原始值的转换
(1)原始值到原始值的转换相对简单,分为:
所有原始值转换为布尔值
所有原始值转换为字符串
所有原始值转换为数字
下表列出了原始值之间的转换:
以上,除了undefined、null、“”、0、-0、NaN转换为布尔值为false外,其他的值包括对象(数组、函数)都转为true。所有原始值转换为字符串的情形也以明确定义。
转换为数字时,比较微妙,那些以数字表示的字符串可以直接转换为数字,也允许在开始和结尾处带有空格,可以直接转换为数字。
但凡在开头和结尾处,都含有任意非空格字符都不会转换为数字,都会转换为NaN。
(2)原始值之间通过什么方法转换呢
1、Number(para)
将任何形式的值转换成数字类型,转不成数字就是NaN,看起来不是数字的就转不成数字
Number(null) //0
2、Boolean(para)
将任何类型的值转换成布尔类型的值
Boolean(null) //false
3、String(para)
将任何形式的值都转换成字符串
String(null) //"null"
4、parseInt(para,radix)
将数字、字符串转换成整数
从数字位开始看,看到非数字位截止,返回数字位,转不成整数会返回NaN
开头必须是数字,否则转换为NaN
string:要转换的值
radix:基低,
将string看成radix进制,再转换成10进制(其他进制转换成十进制)
5、parseFloat(para)
将para转换成浮点型(正常的数字)
从数字位开始看,看到除了点之外的非数字位截止,返回数字位包括点
开头必须是数字,否则是nan
没有进制转换功能
6、toString(radix)
demo.toString(8)
radix:以十进制为基低转换成目标进制 (把十进制转换成其他进制)
null undefined没有toString()方法
通过以上方法进行的类型转换,也称为显示类型转换。
2、原始值到对象的转换
原始值到对象的转换也非常简单,原始值通过调用String()、Number()、Boolean()构造函数,转换为它们各自的包转对象。
null和undefined属于里外,它们不能转为对象类型,通常会发生TypeError的错误,不会执行正常的转换。
3、对象到原始值得转换
(1)对象到布尔值的转换非常简单:
所有的对象(包括数组和函数)都转换为true。对于包装对象亦是如此:new Boolean(false)是一个对象而不是一个值,它将转换为true。
对象到字符串的转换和对象到数字的转换是通过调用toString()和valueOf()来实现的。这里提到的转换规则只适用于本地对象。对于宿主对象(web浏览器定义的对象)根据各自的算法可以转换为字符串和数字。
toString():将任何形式的值变成字符串。
valueOf():将对象转换为它表示的原始值。
(2)对象到字符串的转换要经历的步骤:
1、如果对象具有toString()方法,则调用这个方法。如果返回值是一个原始值,js会将它转换成字符串(这个值本身不是字符串的话)。
2、如果对象没有toString()方法,或者这个方法并不返回一个原始值,那么js会调用valueOf()方法。如果有这个方法的话,js会调用它。如果返回的是原始值,js会将这个值转换为字符串。(需要转的话)
3、否则,通过这俩个方法js都无法获得一个原始值的话,那么就会抛出一个类型错误异常。无法发生转换。
(3)对象到数字的转换过程:
跟对象转换为字符串不一样,js会首先尝试使用valueOf()方法
1、如果对象具有valueOf()方法,就调用这个方法。如果返回结果是一个原始值,js会将它转换为数字。(这个值本身不是数字的话)
2、否则,如果对象具有totring()方法,就调用它。如果返回结果是一个原始值,js会将他转为数字。