JavaScript 中如何比较变量的相等
在程序开发过程中,比较两个变量是否相等是很常见的需求,在 JavaScript 中两种变量类型的比较是有所不同的,本文就一起来回顾一下在 JavaScript 如何比较两个变量是否相等。
先看下面的代码:
从上面代码来看,即使两个变量键和值都一样的情况下,使用 ==
或 ===
返回的结果都是 false
。
在 JavaScript 中对于对象是否相等,需要判断以下两个条件:
对象拥有相同的实例
对象拥有相同的值
拥有相同的实例
在 JavaScript 中有对于不同类型的变量比较有所不同,如下:
对于原始类型(
string
、number
、bigint
、boolean
、null
、undefined
),通过它们的值进行比较。对于引用类型(对象、数组、日期),通过它们的引用进行比较。
引用比较就是对引用类型变量的引用内存地址进行比较,看下面的实例代码:
从上面的代码来看,变量 copyArticle
和 article1
指向的是同一个内存地址,因此返回 true
。
Object.is
Object.is
是一个静态方法,判断两个值是否为同一个值。Object.is
比较 2 个对象相等,比较规则如下:
都是
undefined
都是
null
都是
true
或false
都是相同长度的字符串且相同字符按相同顺序排列
都是相同对象(意味着每个对象有同一个引用)
都是数字且
都是 +0
都是 -0
都是 NaN
或都是非零而且非 NaN 且为同一个值
对于原始类型,判断是否拥有相同的实例,推荐使用
===
和Object.is
拥有相同的值
要比较两个引用类型的值就没那么简单,如比较对象就要比较键和值都相等。引用类型的相等相对复杂一点,和深拷贝类似,也可以通过 JSON.stringify
转换为字符串进行比较,如下代码:
当然也可以使用第三方库来实现,《分享8个可以提高开发效率的JavaScript库》中介绍的 Lodash 最实用的 JavaScript 库之一,拥有大量的函数特性集,像数组、对象、字符串、数字等类型的常见处理函数,语法上面通俗易懂 。
总结
对于比较原始值,推荐使用 ===
和 Object.js
,而对于引用类型的深度相等,简单的方式可以使用 JSON.stringify
转换为字符串再进行比较。
版权声明: 本文为 InfoQ 作者【devpoint】的原创文章。
原文链接:【http://xie.infoq.cn/article/9d263fb917c2c7e59b71e5fd8】。文章转载请联系作者。
评论