美文网首页JavaScript学习笔记
JavaScript学习笔记0_1数据类型和类型转换

JavaScript学习笔记0_1数据类型和类型转换

作者: 菜出意料 | 来源:发表于2019-11-14 18:28 被阅读0次

    数据类型

    JavaScript类型分为基本类型(原始类型)和引用类型(对象类型)两类。

    基本类型(原始类型)

    JavaScript基本类型包括数字、字符串、布尔值、null和undefined。JavaScript学习笔记1_null和undefined传送门!

    引用类型(对象类型)

    JavaScript中除数字、字符串、布尔值、null和undefined之外的都是引用类型(对象类型),主要包括对象、数组和函数。JavaScript

    类型转换

    转换规则见下表:

    转换为:
    字符串 数字 布尔值 对象
    undefined "undefined" NaN false throws TypeError
    null "null" 0 false throws TypeError
    true "true" 1 new Boolean(true)
    false "false" 0 new Boolean(false)
    ""(空字符串) 0 false new String("")
    "1"(非空数字) 1 true new String("1")
    "one"(非空字符) NaN true new String("one")
    0 "0" false new Number(0)
    -0 "0" false new Number(-0)
    NaN "NaN" false new Number(NaN)
    Infinity "Infinity" true new Number(Infinity)
    -Infinity "-Infinity" true new Number(-Infinity)
    1(非0数字) "1" true new Number(1)
    {}(任意对象) 参考转为字符串或数字 参考转为字符串或数字 true
    [](空数组) "" 0 true
    [1](1个数字元素) '1' 1 true
    ['a'](非数字元素) 使用join()方法 NaN true
    function(){}(任意函数) 参考转为字符串或数字 NaN true

    注意:使用Object()函数将null或undefined转换为对象不会抛出异常,仅会返回一个新建的空对象{}。

    Object(undefined)   // {}
    Object(null)        // {}
    

    显示类型转换

    • 使用Number()、Boolean()、String()或Object()函数(不通过new关键字调用这些函数)进行显示类型转换。
    • 转换为Boolean时:仅""、null、undefined、0、NaN、false会转换为false,其他任何值都转换为true。
    Number("2")     // 2
    Number("a12b")  // NaN
    Number("12a")   // NaN
    Number(true)    // 1
    String(false)   // "false"
    Boolean("false") // true 仅""、null、undefined、0、NaN、false会转换为false,其他都转换为true
    Object(3)       // 等价于new Number(3)
    

    对象转换为原始值

    转为Boolean

    任何对象(包括数组和函数)在转为布尔值时都为ture,new Boolean(false)对象在转换时也为true。

    转为字符串或数字

    数组转换为字符串或数字参考上面的表格

    1. 除了null和undefined以为的任何值都具有toString(),这个方法的执行结果通常和String()方法的返回结果一致。
    2. 对象在转换为String时,是通过调用待转换对象的一个方法来完成的。
    3. 所有的对象都继承了toString和valueOf方法。通过这两个方法,我们可以完成对象到字符串或数字的转换。
    • toString方法返回字符串,我们可以通过重写该方法,使之返回比较有意义的信息。
    • valueOf方法一般只是简单的返回对象本身。日期类Date的valueOf返回1970/1/1以来的毫秒数。

    转为字符串的步骤

    1. 如果对象具有toString方法,则自动调用该方法。如果该方法返回原始值,JavaScript会将这个值转换为字符串(返回值可以是非字符串),并返回这个字符串。转换为字符串的规则可以参照上面的表格
    2. 如果没有toString方法,或toString的返回值不是原始值,那么JavaScript会调用valueOf方法,如果valueOf方法返回原始值,JavaScript会将该值转换为字符串并返回。
    3. 如果toString和valueOf方法都没有返回原始值,这时会抛出类型转换异常。

    转为数字

    在对象转为数字的过程中,JavaScript做了同样的事情,只是会先调用valueOf方法。

    1. 如果对象具有valueOf方法,该方法返回原始值,则将原始值转换为数字并返回。
    2. 如果没有valueOf方法或返回值不是原始值,则调用toString方法,如果同String方法返回一个原始值,则转换为数字返回。
    3. 如果toString和valueOf方法都没有返回原始值,这时会抛出类型转换异常。
    • 原始值:基本类型。
    • 非原始值:引用类型。
    var o = { // 都返回原始值
        toString: function() {return 1;},
        valueOf: function() {return 2;}
    }
    '' + o   // '1'
    0 + o   // 2
    
    var o = {
        toString: function() {return true;},
        valueOf: function() {return {};}
    }
    '' + o   // 'true'
    0 + o   // 1   valueOf返回{}非原始值,因此调用toString,返回true,true转为数字为1
    
    var o = {
        toString: function() {return [1,2,3];},
        valueOf: function() {return {};}
    }
    '' + o   // TypeError: Cannot convert object to primitive value
    0 + o   // TypeError: Cannot convert object to primitive value
    

    相关文章

      网友评论

        本文标题:JavaScript学习笔记0_1数据类型和类型转换

        本文链接:https://www.haomeiwen.com/subject/omllictx.html