• JavaScript相等操作符(==)


    参考:
    链接1
    链接2
    链接3

    两组操作符

    相等:==(先转换再比较)
    全等:===(仅比较不转换)

    相等(==)规则

    Boolean规则:Boolean(val):如果有一个操作数是Boolean值,则在比较前先将其转换为数值——false0true1
    String&Number规则:Number(string):如果一个是String,一个是Number,则先将String转为Number
    Object规则:valueOf(obj):如果有一个是对象,则调用valueOf方法(数组调toString()方法)。

    问题探讨

    [] == []; // false
    {} == {}; // false
    [] == ![]; // true
    {} == !{}; // false
    

    [] == []{} == {}是因为引用的对象指向不同的指针,所以不会相等。

    一、[] == ![]

    • 1:逻辑非(!)的优先级高于相等操作符(==),所以先计算![]booleanfalse,此时比较的是:[] == false
    • 2:根据上面提到的boolean规则,则需要把 false 转成 0,此时比较的是:[] == 0
    • 3:根据上面提到的Object规则,调用空数组的toString方法,即[].toString()的值为'',此时比较的是:'' == 0
    • 4:根据上面提到的String规则,将字符串转为数字,即Number('')的值为0,此时比较的是:0 == 0

    简化:
    [] == ![] 转化:[] == false 转化: [] == 0 转化'' == 0 转化: 0 == 0

    二、{} == !{}

    • 1:先计算!{}得到false,此时比较的是:{} == false
    • 2:调用Booean规则,计算Boolean({})得到true,此时比较的是true == false

    简化:
    {} == !{} 转化:{} == false 转化:true == false

  • 相关阅读:
    bzoj3574[Hnoi2014]抄卡组
    bzoj3576[Hnoi2014]江南乐
    [GDKOI2016]小学生数学题
    bzoj3572[Hnoi2014]世界树
    bzoj3571[Hnoi2014]画框
    bzoj3573[Hnoi2014]米特运输
    指数循环节
    bzoj4013[HNOI2015]实验比较
    bzoj4012[HNOI2015]开店
    bzoj1095[ZJOI2007]Hide 捉迷藏
  • 原文地址:https://www.cnblogs.com/firefly-pengdan/p/13390748.html
Copyright © 2020-2023  润新知