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