javaScript中==和===对数组、对象的判断是它们是否同一个实例对象
问题描述
在实现业务时,大量用到了 if(a === b)这样的判断,但有一个类似判断一直进不去这个if条件, a === b 返回的一直是false,但是其他几个类似判断,都正常触发条件。
我们都知道 === 是严格相等,首先要两个值的类型相等,无法触发条件的这个判断,a和b都是Array对象,且通过打印,看到数组中的元素是一样的。于是写了几个测试判断,如下:

通过上图可以看到,对于javascript的基础类型Number、String,如c2和d2都等于1,用c2===d2的结果就是true,但是对于高级类型Object和Array,即便它们的值相等,===返回的也是false,甚至于==也是false。
这实际上是javascript的语言特性:
javascript中Array也是对象,而==或===操作符只能比较两个对象是否是同一个实例,也就是是否是同一个对象引用。图中两个数组显然不是同一个对象实例,由于思维惯性,导致写代码的时候对不同数组也用了类似判断,导致无法成功触发条件。
目前JavaScript没有内置的操作符判断对象的内容是否相同。
可以使用lodash的isEqual方法,如下图:

javaScript中==和===对数组、对象的判断是它们是否同一个实例对象的更多相关文章
- JavaScript中常见的数组操作函数及用法
JavaScript中常见的数组操作函数及用法 昨天写了个帖子,汇总了下常见的JavaScript中的字符串操作函数及用法.今天正好有时间,也去把JavaScript中常见的数组操作函数及用法总结一下 ...
- sort方法实际应用详解---javascript中对一个对象数组按照对象某个属性进行排序
转载: 查看原文 在javascript中,对象和数组是两种不同的类型,这和php中的数组概念不同.在javascript中,也有一些精妙的算法,用来对一些对象进行排序.我在面试迅雷的时候,也拿到一道 ...
- JavaScript中的类数组对象
在javascript中,对象与数组都是这门语言的原生规范中的基本数据类型,处于并列的位置. 一般来说,如果我们有一个对象obj和一个数组a: obj["attr1"]; / ...
- java基础64 JavaScript中的Arrays数组对象和prototype原型属性(网页知识)
1.Arrays数组对象的创建方式 方式一: var 变量名=new Array(); //创建一个长度为0的数组. 方式二: var 变量名=new Array(长度); //创建一个指定长度的数组 ...
- Javascript中Array(数组)对象常用的几个方法
Javascript中Array数组的几个常用方法 pop() --获取数组中末尾的元素 shift() --获取数组中首位元素 push() --在数组中末尾增加元素 slice() --按照下 ...
- Javascript中的基本数据类型,如何判断数据类型,作用域链的理解
第一部分:Javascript中的数据类型 javascript中 基本数据类型有 五种, 数字 number 字符串 string 布尔 boolean 未定义 undefined 空值 nul ...
- javascript中的稀疏数组(sparse array)和密集数组
学习underscore.js数组相关API的时候.遇到了sparse array这个东西,曾经没有接触过. 这里学习下什么是稀疏数组和密集数组. 什么是密集数组呢?在java和C语言中,数组是一片连 ...
- [转贴]JavaScript中Array(数组)的属性和方法
数组有四种定义的方式 使用构造函数:var a = new Array();var b = new Array(8); var c = new Array("first", &qu ...
- javascript中的关联数组
所谓关联数组(associative array), 就是指javascript中的对象. 因为javascript中的属性就是一个个的键值对,可以通过obj[attr]的方式访问,很类似数组. 这种 ...
随机推荐
- java8中规范的四大函数式接口
java8中规范的四大函数式接口: 1.Consumer<T> :消费型接口 void accept(T t); 2.Supplier<T> :供给型接口 ...
- Sonar页面Author页面展示
文主要记录通过Jenkins集成git .svn .sonarqube,获取源码后自动构建进行sonar scanner代码审查,并分析在sonar能够展示Author的原因. 一.Sonar通过je ...
- Alibaba DataX 源码编译
Alibaba DataX 源码编译 标签(空格分隔): ETL DataX简介 设计理念 为了解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负 ...
- Python学习笔记:list的各种操作
向一个列表中添加单个元素: my_list = []my_list.append('我爱你') 移除列表中的某个元素: my_list.pop(0) # 0是需要移除元素在列表中的index 或者是移 ...
- Why are dashes preferred for CSS selectors / HTML attributes?
Why are dashes preferred for CSS selectors / HTML attributes? I use dashes because I don't have to h ...
- linux挂载本地镜像
//创建挂载目录 mkdir /media/cdrom //挂载镜像 mount -t iso9660 /dev/cdrom /media/cdrom 提示:mount:block device /d ...
- vmx转换ofv模板,导入esxi
使用VMware Workstation安装目录下\OVFTool文件的ovftool.exe工具: 转换示例: 首先进入OVFTool根目录.然后执行 ovftool.exe "D:\ce ...
- apache源码安装 转载
转载 1.先进入/usr/local/中创建三个文件夹 apr apr-util apache cd /usr/local目录 mkdir apr mkdir apr-util mkdir apach ...
- influxDB使用小结
在集群中安装influxdb influxdb提供了官方镜像,因此在集群中安装influxdb十分方便,只需要指定镜像名为influxdb即可自动下载运行,只需要配置环境变量就可以进行初始化设置 以下 ...
- 简单的python下载器
最近在玩爬虫,有时候会爬下来很多感兴趣文件的连接. 如果自己手动下载它们的话工作量实在太大. 于是,简单写了个下载小脚本: import os, urllib2 os.chdir(r'd:') url ...