• 数据类型的转换


    原文地址:https://wangdoc.com/javascript/

    强制转换

    强制转换主要指使用Number()String()Boolean()三个函数,手动将各种类型的值,分别转换成数字、字符串或者布尔值。

    Number()

    使用Number()函数,可以将任意类型的值转化成数值。

    • 原始类型值
      原始类型值的转换规则如下:
    // 数值:转换后还是原来的值
    Number(324) // 324
    
    // 字符串:如果可以被解析为数值,则转换为相应的数值
    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()将字符串转为数值,要比parseInt()严格很多。基本上只要有一个字符无法转成数值,整个字符串就会被转成NaN

    parseInt("42 cats") // 42
    Number("42 cats") // NaN
    

    上面代码中,parseInt逐个解析字符,而Number函数整体转换字符串的类型。另外,parseIntNumber函数都会自动过滤一个字符串前导和后缀的空格。

    • 对象
      简单的规则是,Number()参数是对象时,将返回NaN,除非是包含单个数值的数组。
    Number({ a: 1 }) // NaN
    Number([1, 2, 3]) // NaN
    Number([4]) // 4
    

    之所以会这样,是因为Number背后的转换规则比较复杂。
    第一步,调用对象自身的valueOf方法。如果返回原始类型的值,则直接对该值使用Number函数,不再进行后续步骤。
    第二步,如果valueOf返回的还是对象,则改为调用对象自身的toString方法。如果toString方法返回原始类型的值,则对该值使用Number函数,不再进行后续步骤。
    第三步,如果toString方法返回的是对象,就报错。

    var obj = {
        valueOf : function() {
            return {};
        },
    
        toString : function() {
            return {};
        }
    };
    
    Number(obj) // TypeError: Cannot convert object to primitive value
    

    String()

    String函数可以将任意类型的值转化为字符串,转换规则如下。
    (1)原始类型值

    • 数值:转为相应的字符串
    • 字符串:转换后还是原来的值
    • 布尔值:true转为字符串的"true"false转为字符串"false"
    • undefined:转为字符串"undefined"
      *null:转为字符串"null"
      (2)对象
      String方法的参数如果是对象,返回一个类型字符串;如果是数组,返回该数组的字符串形式。
    String({a: 1}) // "[object Object]"
    String([1, 2, 3]) // "1,2,3"
    

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

    Boolean()

    Boolean函数将任意类型的值转为布尔值。
    它的转换规则相对简单:除了以下五个值得转换结果为false,其他的值全部为true

    • undefined
    • null
    • -0+0
    • NaN
    • ""空字符串

    自动转换

    以下三种情况,JavaScript会自动转换数据类型。
    第一种情况,不同类型的数据互相运算。

    123 + "abc" // "123abc"
    

    第二种情况,对非布尔值类型的数据求布尔值。
    第三种情况,对非数值类型的值使用一元运算符(即+-

    + {foo: "bar"} // NaN
    - [1, 2, 3] // NaN
    

    自动转换的规则是这样的:预期什么类型的值,就调用该类型的转换函数。比如,某个位置预期为字符串,就调用String函数进行转换。如果该位置即可以是字符串,也可能是数值,那么默认转为数值。

  • 相关阅读:
    Linnia学习记录
    漫漫考研路
    ENS的学习记录
    KnockoutJS 3.X API 第四章 数据绑定(4) 控制流with绑定
    KnockoutJS 3.X API 第四章 数据绑定(3) 控制流if绑定和ifnot绑定
    KnockoutJS 3.X API 第四章 数据绑定(2) 控制流foreach绑定
    KnockoutJS 3.X API 第四章 数据绑定(1) 文本及样式绑定
    KnockoutJS 3.X API 第三章 计算监控属性(5) 参考手册
    KnockoutJS 3.X API 第三章 计算监控属性(4)Pure computed observables
    KnockoutJS 3.X API 第三章 计算监控属性(3) KO如何实现依赖追踪
  • 原文地址:https://www.cnblogs.com/chris-jichen/p/9989697.html
Copyright © 2020-2023  润新知