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

    转Boolean

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

    对象转基本类型

    对象在转换基本类型时,首先会调用 valueOf 然后调用 toString。并且这两个方法你是可以重写的。

    let a = {
        valueOf() {
        	return 0
        }
    }
    

    也可以重写 Symbol.toPrimitive ,该方法在转基本类型时调用优先级最高。

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

    四则运算符

    只有当加法运算时,其中一方是字符串类型,就会把另一个也转为字符串类型。
    并且加法运算会触发三种类型转换:将值转换为原始值,转换为数字,转换为字符串。
    其他运算只要其中一方是数字,那么另一方就转为数字。

    1 + '1' // '11'
    2 * '2' // 4
    [1, 2] + [2, 1] // '1,22,1'
    // [1, 2].toString() -'1,2'
    // [2, 1].toString() -'2,1'
    // '1,2' + '2,1' = '1,22,1'
    
    'a' + + 'b' // -"aNaN"
    // 因为 + 'b' -NaN
    // 你也许在一些代码中看到过 + '1' -1
    

    == 操作符

    比较运算x==y,其中和和y是值,产生tue或者 false.这样的比较按如下方式进行:
    1.若Type(x)与 Typey)相同,则
       a.若Type(x)为 Undefined,返回true
       b.若Type(x)为Nu,返回tue
       c.若Type(x)为 Number,则
        1.若x为NaN,返回fase
        2.若y为NaN,返回 False
        3.若x与y为相等数值,返回true
        4.若x为+0且y为-0,返回true
        5.若x为-0且y为+0,返回te
        6..返回fase
      d.若 Type(x)为 String则当x和y为完全相同的字符序列(长度相等且相同字符在相同位置)时返回ue.否则返回fase
      e.若Type(x)为 Boolean,当x和y为同为rue或者同为 false时返回true.否则,返回 false
      f.当x和y为引用同一对象时返回tue.否则,返回 false
    2.若x为nu且y为 undefined,返回true
    3.若x为 undefined且y为nu,返回te
    4.若Type(x)为 Number且 Type(y)为Stng,返回 comparison x== ToNumbery)的结果.
    5.若Type(x)为 String且Type(y)为 Number,
    6.返回比较 ToNumber(x)y的结果
    7.若Type(x)为 Boolean,返回比较 ToNumbert(x)
    y的结果.
    8.若 Type(y)为 Boolean,返回比较x== ToNumber(y)的结果
    9.若Type(x)为Stng或 Number,且 Type(y)为 Object,返回比较x== ToPrimitivey)的结果.
    10.若Type(x)为 Object且Type(y)为 String或 Number,返回比较 ToPrimitive(x)==y的结果.
    11.返回 false.

    上图中的 toPrimitive 就是对象转基本类型。

    DEMO

    // 解析[] == ![] // -true ,下面是这个表达式为何为 true 的步骤
    // [] 转成 true,然后取反变成 false
    [] == false
    // 根据第 8 条得出
    [] == ToNumber(false)
    [] == 0
    // 根据第 10 条得出
    ToPrimitive([]) == 0
    // [].toString() -''
    '' == 0
    // 根据第 6 条得出
    0 == 0 // -true
    

    比较运算符

    • 如果是对象,就通过 toPrimitive 转换对象
    • 如果是字符串,就通过 unicode 字符索引来比较

    参考资料:
    前端进阶之道

  • 相关阅读:
    laravel 安装完成后安装 vendor 目录
    requires php ~7.1 -> your PHP version (7.0.18) does not satisfy that requirement
    查看laravel版本
    git update-index --assume-unchanged
    Git 取消跟踪已版本控制的文件(亲测可行)
    git把某个文件去除版本控制
    git如何移除某文件夹的版本控制
    git如何移除某文件的版本控制
    git 教程
    Git branch && Git checkout常见用法
  • 原文地址:https://www.cnblogs.com/guangzan/p/11270612.html
Copyright © 2011-2022 走看看