JS数据类型转换

151 阅读3分钟

数据类型

JS中有5中简单数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number、String。还有一种复杂数据类型------Object,Object本质是由一组无序的名值对组成的。

鉴于ECMAScript是松散类型的(可以给变量赋值为任意类型。),因此需要有一种手段来检测给定变量的数据类型----typeof就是负责提供这方面信息的操作符。

         对一个值使用typeof操作符可能返回下列某个字符串:

    undefined----如果这个值未初始化或未声明
    Boolean----如果这个值是布尔值
    string---如果这个值是字符串
    number----如果这个值是数值
    object----如果这个值是对象或null
    function----如果这个值是函数
    
    

typeof为什么对null错误的显示??

       这是因为javascript中不同对象在底层都表示为二进制,而javascript 中会把二进制前三位都为0的判断为object类型,而null的二进制表示全都是0,自然前三位也是0,所以执行typeof时会返回'object。
       

显式的转换数据类型

显示的转换数据类型主要通过JS定义的数据转换方法。

a.转型函数

转换为布尔值:

         Boolean() :将一个值转换为其对应的Boolean值

              e.g.    var message = “Hello world!”;

                       var messageAsBoolean = Boolean(message)

                       console.log(messageAsBoolean);   //true

  各种数据类型及其对应的转换规则。

     数据类型                  转换为true的值               转换为false的值

     Boolean                      true                                      false

     String                     任何非空字符串                  “” (空字符串)

     Number              任何非零数字值(包括无穷大)        0和NaN

     Object                     任何对象                                    null

     Underfined                   n/a                                    undefined

转换为数字:

有3个函数可以把非数值转换为数值:Number()、parseInt()、parseFloat()。第一个函数,即转型函数Number()可以用于任何数据类型,而另两个函数则专门用于把字符串转换成数值。这三个函数对于同样的输入会返回不同的结果。

转换为字符串

            要把一个值转换为一个字符串有两种方式。第一种是使用几乎每个值都有的toString()方法,这个方法唯一要做的就是返回相应值的字符串表现。

数值、布尔值、对象、和字符串值(没错,每个字符串也都有一个toString()方法,该方法返回字符串的一个副本)都有toString()方法。但null和undefined值没有这个方法。

多数情况下,调用toString()方法不必传递参数。但是,在调用数值的toString()方法时,可以传递一个参数:输出数值的基数。默认情况下,toString()方法以十进制格式返回数值的字符串表示。

在不知道要转换的值是不是null或undefined的情况下,还可以使用转型函数String(),这个函数能够将任何类型的值转换为字符串。

隐式的数据转换

在JS中有一些操作符或者语句也会进行数据转换。比如if语句将条件转换为布尔类型值。

a. 递增和递减操作符

递增和递减操作符直接借鉴自C,而且各有两个版本:前置型和后置型(a++ ,a-- ,++a , --a)。顾名思义,前置型应该位于要操作的变量之前,而后置型应该位于要操作的变量之后。

 这4个操作符对任何值都适用,也就是他们不仅适用于整数,还可以用于字符串、布尔值、浮点数值和对象,此时伴随着隐式的数据类型转换。

b. 一元加和减操作符

   在对非数值应用一元加操作符时,该操作符会像Number()转型函数一样对这个值执行转换。换句话说,布尔值false和true将被转换为0和1。

b. 逻辑非操作符 与 比较操作符 将任意值转换为 布尔值

  逻辑非操作符首先会将他的操作数转换为一个布尔值,然后再对其求反。

关系比较操作符

        <img src="https://images2015.cnblogs.com/blog/1088731/201701/1088731-20170109150150353-959974871.png" alt="" class="medium-zoom-image">