JS类型转换注意点

发布时间:2024年01月04日
  1. ToPrimitive(obj, Number) 和 ToPrimitive(obj, String) 调用顺序不同在于: 区别在于调用 toString 方法和 valueOf 方法的顺序,区分这一点就行了。

    ToPrimitive(obj, Number) ==> Number({})

    1. 如果 obj 是基本类型,直接返回
    2. 否则,调用 valueOf 方法,如果得到原始值,则返回
    3. 否则,调用 toString 方法,如果得到原始值,则返回
    4. 否则,报错

    ToPrimitive(obj, String) ==> Number({})

    1. 如果 obj 是基本类型,直接返回
    2. 否则,调用 toString 方法,如果得到原始值,则返回
    3. 否则,调用 valueOf 方法,如果得到原始值,则返回
    4. 否则,报错
  2. 一元运算 +a

    +a 等同 ToPrimitive(obj, Number)

  3. 二元运算 a+b

    a+b 等同 ToPrimitive(obj) + ToPrimitive(obj)

    1. 当 + 两边有一个是字符串,则按字符串进行拼接
    2. 否则,转到 number 进行计算
  4. ToPrimitive(arr)

    ToPrimitive([]) => [].tostring() => [].join(“,”) => “”
    ToPrimitive([1, 2, 3]) => [1, 2, 3].tostring() => [1, 2, 3].join(“,”) => “1,2,3”

  5. ToPrimitive(obj)

    ToPrimitive({}) => {}.toString() => “[object Object]”
    ToPrimitive({ a: 1, b: 2 }) => { a: 1, b: 2 }.toString() => “[object Object]”

  6. 其他

    console.log(1 + null); //1
    console.log([] + []); //‘’
    console.log([] + {}); //‘[object Object]’
    console.log({} + {}); //‘[object Object][object Object]’

文章来源:https://blog.csdn.net/yiguoxiaohai/article/details/135382660
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。