zoukankan      html  css  js  c++  java
  • JS的类型转换

    首先我们要知道,在 JS 中类型转换只有三种情况,分别是:

    • 转换为布尔值
    • 转换为数字
    • 转换为字符串

    我们先来看一个类型转换表格

    转Boolean

    在条件判断时,除了 undefined, null, false, NaN, '', 0, -0,其他所有值都转为 true,包括所有对象。

    对象转原始类型

    对象在转换类型的时候,会调用内置的 [[ToPrimitive]] 函数,对于该函数来说,算法逻辑一般来说如下:

    • 如果已经是原始类型了,那就不需要转换了
    • 调用 x.valueOf(),如果转换为基础类型,就返回转换的值
    • 调用 x.toString(),如果转换为基础类型,就返回转换的值
    • 如果都没有返回原始类型,就会报错

    当然你也可以重写 Symbol.toPrimitive ,该方法在转原始类型时调用优先级最高。

    let a = {
      valueOf() {
        return 0
      },
      toString() {
        return '1'
      },
      [Symbol.toPrimitive]() {
        return 2
      }
    }
    1 + a // => 3

    四则运算符

    加法运算符不同于其他几个运算符,它有以下几个特点:

    • 运算中其中一方为字符串,那么就会把另一方也转换为字符串
    • 如果一方不是字符串或者数字,那么会将它转换为数字或者字符串
    1 + '1' // '11'
    true + true // 2
    4 + [1,2,3] // "41,2,3"
    • 对于第一行代码来说,触发特点一,所以将数字 1 转换为字符串,得到结果 '11'
    • 对于第二行代码来说,触发特点二,所以将 true 转为数字 1
    • 对于第三行代码来说,触发特点二,所以将数组通过 toString 转为字符串 1,2,3,得到结果 41,2,3

    另外对于加法还需要注意这个表达式 'a' + + 'b'

    'a' + + 'b' // -> "aNaN"

    因为 + 'b' 等于 NaN,所以结果为 "aNaN",你可能也会在一些代码中看到过 + '1' 的形式来快速获取 number 类型, + ' ' => 0 。

    那么对于除了加法的运算符来说,只要其中一方是数字,那么另一方就会被转为数字

    4 * '3' // 12
    4 * [] // 0
    4 * [1, 2] // NaN

    比较运算符

    1. 如果是对象,就通过 toPrimitive 转换对象
    2. 如果是字符串,就通过 unicode 字符索引来比较
    let a = {
      valueOf() {
        return 0
      },
      toString() {
        return '1'
      }
    }
    a > -1 // true

    在以上代码中,因为 a 是对象,所以会通过 valueOf 转换为原始类型再比较值。

  • 相关阅读:
    C# .net页面乱码
    Spring Cloud 微服务三: API网关Spring cloud gateway
    Spring Cloud 微服务二:API网关spring cloud zuul
    Spring Cloud 微服务一:Consul注册中心
    Log4j2升级jar包冲突问题
    Log4j2配置
    opensearch空查询
    阿里云Opensearch数据类型
    Spring mybatis自动扫描dao
    【EDAS问题】轻量级EDAS部署hsf服务出现找不到类的解决方案
  • 原文地址:https://www.cnblogs.com/gwf93/p/10295234.html
Copyright © 2011-2022 走看看