1. 隐式转换

    toPrimitive 方法会将值转换为基本类型,一般是 string 和 number,再通过 string 和 number 转换为 boolean 等等
    (1)当 type 为 number

    • valueOf -> toString -> TypeError

    (2)当 type 为 string

    • toString -> valueOF -> TypeError

    • 当调用 Date 的 toPrimitive 时,会默认 type 为 string;否则会默认 type 为 number

    隐式转换通常发生在 +`-\*\/`以及 ==、>、< 这些运算符中,这些运算符只能操作基本类型,所以运算第一步就是 toPrimitive 转换成基本类型再进行操作

      • 操作符,如果两边有任意一个 string 或通过 toPrimitive 转为 string 的情形;其他情形下两边都会转为 number
        1. 1 + '12' // 13
        2. 1 + Symbol // Uncaught TypeError: Cannot convert a Symbol value to a number
        3. false + true // 1
        4. '1' + false // '1false'
        • / 操作符,也会转为 number
    1. == 操作符,两边都尽量转为 number

      1. 3 == true // false,true 转为 1
      2. '0' == false // true,'0' 转为 0,false 转为 0
    2. <> 操作符

      1. 如果两边都是字符串,比较字母表顺序
      2. 其他情况,转为数字
      3. 对象转为 toPrimitive ```typescript ‘ca’ < ‘bd’ // false ‘a’ < ‘b’ // true ‘12’ < 13 // true ‘false’ > -1 // true

    let a = {} a > 2

    a.valueOf() a.toString() b.valueOf() b.toString() a + b

    ```

    1. + 操作符什么时候用于字符串拼接
    • 如果某个操作数是字符串,或能够通过以下步骤转换为字符串,+ 会产生拼接操作
    • 如果其中一个是引用类型,首先用 toPrimitive 操作,返回字符串的话会拼接;返回数字的会计算
    • 如果不能转换为字符串,则会将其转换为数字类型进行计算

    总结:+ 其中一个操作数是字符串(或 toPrimitive 得到字符串),则执行字符串拼接,否则执行数字加法;当变为加法的逻辑,只要其中一方是数字,那么另一方就会转为数字

    1. 为什么会有 BigInt 提案

    Number.MAX_SAFE_INTEGET 表示了最大安全数字,在这个数的范围内数字精度不会丢失(不包含小数)。为了解决超出这个范围内的大数的计算问题,JS 需要用到一些三方库,比如 Math.js 。后面 Ecma 小组提案了 BigInt 来解决此问题

    1. Object.assign 和 … 运算符的区别

    … 和 Object.assign 都是浅拷贝,都会转换 string 到包装类型

    1.https加密过程,尽量详细

    2.为什么数据上报使用1个像素的GIF

    3.npm install的原理