• JS隐式转换==与!运算符


    js是弱类型语言,运算时若两边数据类型不一样会自动转换类型,写代码时不小心就就掉坑里了。
    看下面面试题:

    console.log([]==[]);//false
    console.log(![]==[]);//true
    console.log(![]==![]);//true
    console.log(![]==false);//true
    console.log([]==true);//false
    console.log([]=="");//true
    console.log(0==![]);//true

    我表示有很多问号???
    首先看一下JS数据类型:
    数据基本类型:Number,String,Boolean,null,undefined,symbol(ES6)。
    再有一个对象值Object。

    1.`console.log([]==[]);`
    数组是对象类型,它是有引用地址的,而每个引用地址都是不同的,所以这里是false。
    2.`console.log(![]==[]);`
    在网上科普了很久,我们可以这么理解,当boolean类型与其他类型比较时,两边都转换为数字进行比较,在这里,!运算符优先级是比==优先级高的,所以先运算![],有非运算符就意味着需要将[]转换为boolean,而[]是对象类型,因此就会转换为true,再取反,![]结果就是false,即0,空数组转为数值为0,所以结果为true。
    3.`console.log(![]==![]);`
    上一个是true,这一个也是true?是不是感觉特别有趣,,![]转为布尔为false,false转为数值为0,两边一样,所以结果为true。
    4.`console.log(![]==false);`
    同理,![]为false,另一边也是false,为true。
    5.`console.log([]==true);`
    对象和布尔值进行比较时,最终都转为数字,对象先转换为字符串,然后再转换为数字,布尔值直接转换为数字,空数组转为字符是空字符串,而""==false ==0 三者是相等的,true转为数值为1,所以结果为false。
    6.`console.log([]=="");`
    同上,[]转为string为"",两边相同,结果为true。
    7.`console.log(0==![]);`
    数据进行boolean转换时,只有""、0、false、undefined、null、NaN六种结果为false,其余全为true,所以数组转布尔为true,取反为false、与0相等,结果为true。

    并不是所有的隐式转换都转换为数字,只要同一类型即可,是按照这么个顺序来的:对象 --> 先转String --> 再转Number;Boolean --> 直接转为Number。

    逆战班 JS Week Two

    因需转载CSDN:https://blog.csdn.net/HelloWorld1626/article/details/105185515

  • 相关阅读:
    C#利用反射动态调用类及方法
    系统程序监控软件
    SQL server 2008 安装和远程访问的问题
    sql server 创建临时表
    IIS 时间问题
    windows 2008 安装 sql server 2008
    sql server xml nodes 的使用
    Window 7sp1 安装vs2010 sp1 打开xaml文件崩溃
    CSS资源网址
    Could not load type 'System.ServiceModel.Activation.HttpModule' from assembly 'System.ServiceModel, Version=3.0.0.0
  • 原文地址:https://www.cnblogs.com/HelloWorld1626/p/12595372.html
Copyright © 2020-2023  润新知