• javascript中的隐式类型转化


    javascript中的隐式类型转化 

    #隐式转换

    ## “+” 字符串和数字

    如果某个操作数是字符串或者能够通过以下步骤转换为字符串的话,+将进行拼接操作。
    如果其中一个操作数是对象(包括数组),则首先对其调用`ToPrimitive`抽象操作,该抽象操作再调用`[[DefaultValue]]`,以数字作为上下文。
    `[1,2]+[3,4]=='1,23,4'`
    原因,因为数组的valueOf操作无法得到简单的基本类型,于是它转而调用toString。因此上栗得到的是'1,23,4'。

    ## 布尔值到数字的隐式强制类型转换

    ```js
    function onlyOne(){
    var sum = 0;
    for(var i=0;i<arguments.length;i++){
    if(arguments[i]){ //跳过假值 undefined也是假值,避免NaN
    sum+=arguments[i];
    }
    }
    return sum === 1;
    }
    ```

    ## 隐式强制类型转换为布尔值

    `undefined null false +0 -0 NaN ""`会被转化为false

    # ==和===

    > ① `字符串、数字和布尔型的比较都会转换为数字类型进行比较`
    > ② `特殊的有null和undefined,他们去其它类型比较都为false`
    > ③ 对象和其它类型比较,都会将对象先转化为`primitive`值然后进行比较

    ## 字符串和数字

    `X==Y`
    规范:
    (1)如果Type(x)是数字,Type(y)是字符串,则返回`x==ToNumber(y)`的结果
    (2)如果Type(x)是字符串,Type(y)是数字,则返回`ToNumber(x)==y`的结果
    > `总而言之,==比较的是两个数字。`

    ## 其它类型和布尔类型之间的相等比较

    ```js
    var a = '22';
    var b = true;
    a == b // false
    var a = '22';
    var b = false;
    a == b // false
    ```
    '22'是一个真值,为什么==的结果不是true呢?很容易掉坑里面。需要重视。
    规范:
    (1)如果Type(x)是布尔值,则返回`ToNumber(x)==y`的结果
    (2)如果Type(y)是布尔值,则返回`x==ToNumber(y)`的结果

    ## null和undefined的比较

    规范:
    (1)如果x为`null`,y为`undefined`,结果为`true`
    (2)如果x为`undefined`,y为`null`,结果为`true`
    > `只要==一边出现null或者undefined,另一边是其它类型,结果都为false`
    ```js
    var a = null;
    var b;
    a==b //true
    a==null//true
    b==null // true
    a == false // false
    b == false // false
    a == '' //false
    b == '' //false
    a == 0 //false
    b == 0 //false
    ```

    ## 对象和非对象之间比较

    对象(对象|函数|数组)和标量基本类型(字符串|数字|布尔)之间的相等比较。
    规范:
    (1)如果`Type(x)`是字符串或者数字,`Type(y)`是对象,则返回`x == ToPrimitive()`的结果
    (2)如果`Type(x)`是对象,`Type(y)`是字符串或者数字,则返回`Toprimitive() == y`的结果
  • 相关阅读:
    TcIC(Teamcenter集成CatiaV5)的安装
    centos7上使用bind解析子域名
    Windows10 家庭版(1903/1909)中用RDPWrapper-v1.6.2和autoupdate补丁开启远程桌面功能
    修改SQL Server Express 2019 sa用户密码的方法
    微星B450主板安装64G内存的一个小招数
    缩小xfs文件系统的CentOS/RedHat虚拟机硬盘的迂回方法
    MQL命令的打开方式
    台电TBook二合一本全新安装Windows10
    django_auth_ldap
    开始认真学计算机网络----computer network学习笔记(一)
  • 原文地址:https://www.cnblogs.com/sivkun/p/7533451.html
Copyright © 2020-2023  润新知