美文网首页
数据类型转换

数据类型转换

作者: zjh111 | 来源:发表于2017-11-25 08:55 被阅读0次

    Boolean()

    使用Boolean函数,可以将任意类型的变量转为布尔值。

    它的转换规则相对简单:除了以下六个值的转换结果为false,其他的值全部为true。

    undefined
    null
    -0
    0或+0
    NaN
    ''(空字符串)

    Number()

    pareInt()
    parseFloat
    ' ' - 0

    • ' '

    原始类型

    // 字符串:如果可以被解析为数值,则转换为相应的数值
    Number('324') // 324
    
    // 字符串:如果不可以被解析为数值,返回NaN
    Number('324abc') // NaN
    
    // 空字符串转为0
    Number('') // 0
    
    // 布尔值:true 转成1,false 转成0
    Number(true) // 1
    Number(false) // 0
    
    // undefined:转成 NaN
    Number(undefined) // NaN
    
    // null:转成0
    Number(null) // 0
    

    Number函数会自动过滤一个字符串前导和后缀的空格。
    对象的转换规则

    简单的规则是,Number方法的参数是对象时,将返回NaN,除非是包含单个数值的数组。

    Number({a: 1}) // NaN
    Number([1, 2, 3]) // NaN
    Number([5]) // 5
    

    Number背后的转换规则。

    1. 调用对象自身的valueOf方法。如果返回原始类型的值,则直接对该值使用Number函数,不再进行后续步骤。
    2. 如果valueOf方法返回的还是对象,则改为调用对象自身的toString方法。如果toString方法返回原始类型的值,则对该值使用Number函数,不再进行后续步骤。
    3. 如果toString方法返回的是对象,就报错。
    var obj = {x: 1};
    Number(obj) // NaN
    
    // 等同于
    if (typeof obj.valueOf() === 'object') {
      Number(obj.toString());
    } else {
      Number(obj.valueOf());
    }
    

    String()

    原始类型值的转换。
    数值:转为相应的字符串。
    字符串:转换后还是原来的值。
    布尔值:true转为"true",false转为"false"。
    undefined:转为"undefined"。
    null:转为"null"。

    对象的转换规则
    String方法的参数如果是对象,返回一个类型字符串;如果是数组,返回该数组的字符串形式。

    String({a: 1}) // "[object Object]"
    String([1, 2, 3]) // "1,2,3"
    

    String方法背后的转换规则,与Number方法基本相同,只是互换了valueOf方法和toString方法的执行顺序。

    1. 先调用对象自身的toString方法。如果返回原始类型的值,则对该值使用String函数,不再进行以下步骤。
    2. 如果toString方法返回的是对象,再调用原对象的valueOf方法。如果valueOf方法返回原始类型的值,则对该值使用String函数,不再进行以下步骤。
    3. 如果valueOf方法返回的是对象,就报错。

    自动转换

    boolean

    当 JavaScript 遇到预期为布尔值的地方(比如if语句的条件部分),就会将非布尔值的参数自动转换为布尔值。系统内部会自动调用Boolean函数。
    因此除了以下六个值,其他都是自动转为true。

    undefined
    null
    -0
    0或+0
    NaN
    ''(空字符串)

    字符串

    JavaScript 遇到预期为字符串的地方,就会将非字符串的数据自动转为字符串。具体规则是,先将复合类型的值转为原始类型的值,再将原始类型的值转为字符串。

    字符串的自动转换,主要发生在字符串的加法运算时。当一个值为字符串,另一个值为非字符串,则后者转为字符串。

    '5' + 1 // '51'
    '5' + true // "5true"
    '5' + false // "5false"
    '5' + {} // "5[object Object]"
    '5' + [] // "5"
    '5' + function (){} // "5function (){}"
    '5' + undefined // "5undefined"
    '5' + null // "5null"
    

    这种自动转换很容易出错。

    var obj = {
      width: '100'
    };
    
    obj.width + 20 // "10020"
    

    上面代码中,开发者可能期望返回120,但是由于自动转换,实际上返回了一个字符10020。

    数值

    当JavaScript遇到预期为数值的地方,就会将参数值自动转换为数值。系统内部会自动调用Number函数。

    除了加法运算符有可能把运算子转为字符串,其他运算符都会把运算子自动转成数值。注意:null 转为数值时为0,而 undefined 转为数值时为 NaN。

    '5' - '2' // 3
    '5' * '2' // 10
    true - 1  // 0
    false - 1 // -1
    '1' - 1   // 0
    '5' * []    // 0
    false / '5' // 0
    'abc' - 1   // NaN
    null + 1 // 1
    undefined + 1 // NaN
    

    上面代码中,运算符两侧的运算子,都被转成了数值。

    一元运算符也会把运算子转成数值。

    +'abc' // NaN
    -'abc' // NaN
    +true // 1
    -false // 0
    

    相关文章

      网友评论

          本文标题:数据类型转换

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