javaScript关于类型转换

一、类型转换

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会将他转为数字。

猜你喜欢

转载自www.cnblogs.com/echo-dauntless/p/9745813.html