• javaScript中==和===对数组、对象的判断是它们是否同一个实例对象


     

    问题描述

    在实现业务时,大量用到了 if(a === b)这样的判断,但有一个类似判断一直进不去这个if条件, a === b 返回的一直是false,但是其他几个类似判断,都正常触发条件。

    原因分析

    我们都知道 === 是严格相等,首先要两个值的类型相等,无法触发条件的这个判断,a和b都是Array对象,且通过打印,看到数组中的元素是一样的。于是写了几个测试判断,如下:

    image.png

    通过上图可以看到,对于javascript的基础类型Number、String,如c2和d2都等于1,用c2===d2的结果就是true,但是对于高级类型Object和Array,即便它们的值相等,===返回的也是false,甚至于==也是false。

    这实际上是javascript的语言特性:

    javascript中Array也是对象,而==或===操作符只能比较两个对象是否是同一个实例,也就是是否是同一个对象引用。图中两个数组显然不是同一个对象实例,由于思维惯性,导致写代码的时候对不同数组也用了类似判断,导致无法成功触发条件。

     

    解决方案

    目前JavaScript没有内置的操作符判断对象的内容是否相同。

    可以使用lodash的isEqual方法,如下图:

    image.png

     

  • 相关阅读:
    HBase api
    使用memcached缓存 替代solr中的LRUCache缓存
    Solrj
    在Solr中配置中文分词IKAnalyzer
    (转载)怎样让自己内心强大起来?
    (转载)Linux一句话精彩
    (转载)C++创建对象的两种方法
    (转载)puremvc框架之proxy
    (转载)AS3领航系列教程 之 AS3程序的入口
    (转载)Flash Number 数据类型
  • 原文地址:https://www.cnblogs.com/yourstars/p/11970525.html
Copyright © 2020-2023  润新知