首页>>前端>>JavaScript->JavaScript中如何比较变量是否相等

JavaScript中如何比较变量是否相等

时间:2023-11-29 本站 点击:0

前言

在程序开发过程中,比较两个变量是否相等是很常见的需求,在 JavaScript 中两种变量类型的比较是有所不同的,本文就一起来回顾一下在 JavaScript 如何比较两个变量是否相等。

先看下面的代码:

constarticle1={title:"JavaScript对象相等",summary:"一起来回顾一下如何比较两个对象相等",};constarticle2={title:"JavaScript对象相等",summary:"一起来回顾一下如何比较两个对象相等",};console.log(article1===article1);//trueconsole.log(article1===article2);//falseconsole.log(article1==article2);//falseconsole.log(Object.is(article1,article2));//falseconsole.log(Object.is(article1,article1));//true

从上面代码来看,即使两个变量键和值都一样的情况下,使用 ===== 返回的结果都是 false

在 JavaScript 中对于对象是否相等,需要判断以下两个条件:

对象拥有相同的实例

对象拥有相同的值

拥有相同的实例

在 JavaScript 中有对于不同类型的变量比较有所不同,如下:

对于原始类型(stringnumberbigintbooleannullundefined),通过它们的值进行比较。

对于引用类型(对象、数组、日期),通过它们的引用进行比较。

引用比较就是对引用类型变量的引用内存地址进行比较,看下面的实例代码:

constarticle1={title:"JavaScript对象相等",summary:"一起来回顾一下如何比较两个对象相等",};constarticle2={title:"JavaScript对象相等",summary:"一起来回顾一下如何比较两个对象相等",};constcopyArticle=article1;console.log(article2===copyArticle);//falseconsole.log(copyArticle==article1);//true

从上面的代码来看,变量 copyArticlearticle1 指向的是同一个内存地址,因此返回 true

Object.is

Object.is 是一个静态方法,判断两个值是否为同一个值。Object.is 比较 2 个对象相等,比较规则如下:

都是 undefined

都是 null

都是 truefalse

都是相同长度的字符串且相同字符按相同顺序排列

都是相同对象(意味着每个对象有同一个引用)

都是数字且

都是 +0

都是 -0

都是 NaN

或都是非零而且非 NaN 且为同一个值

constarticle1={title:"JavaScript对象相等",summary:"一起来回顾一下如何比较两个对象相等",};constarticle2={title:"JavaScript对象相等",summary:"一起来回顾一下如何比较两个对象相等",};constobjectIs=(obj1,obj2)=>Object.is(obj1,obj2);console.log(objectIs(article1,article1));//trueconsole.log(objectIs(undefined,undefined));//trueconsole.log(objectIs(null,null));//trueconsole.log(objectIs(-0,-0));//trueconsole.log(objectIs(JSON.stringify(article1),JSON.stringify(article2)));//true

对于原始类型,判断是否拥有相同的实例,推荐使用 ===Object.is

拥有相同的值

要比较两个引用类型的值就没那么简单,如比较对象就要比较键和值都相等。引用类型的相等相对复杂一点,和深拷贝类似,也可以通过 JSON.stringify 转换为字符串进行比较,如下代码:

consta={foo:"bar",bar:{baz:2,},a(){console.log("fun");},};constb={foo:"bar",bar:{baz:2,},a(){console.log("fun");},};constarticle1={title:"JavaScript对象相等",summary:"一起来回顾一下如何比较两个对象相等",};constarticle2={title:"JavaScript对象相等",summary:"一起来回顾一下如何比较两个对象相等",};constobjectIs=(obj1,obj2)=>Object.is(obj1,obj2);constisObject=(object)=>object!=null&&typeofobject==="object";constisFunction=(fun)=>typeoffun==="function";constequalFuns=(fun1,fun2)=>{returnfun1.toString()===fun2.toString();};constjsonEqual=(obj1,obj2)=>objectIs(JSON.stringify(obj1),JSON.stringify(obj2));constisEqual=(obj1,obj2)=>{constkeys1=Object.keys(obj1);constkeys2=Object.keys(obj2);if(keys1.length!=keys2.length){returnfalse;}for(letindex=0;index<keys1.length;index++){constval1=obj1[keys1[index]];constval2=obj2[keys2[index]];constareObjects=isObject(val1)&&isObject(val2);constareFuns=isFunction(val1)&&isFunction(val2);if(areFuns){returnequalFuns(val1,val2);}else{if((areObjects&&!isEqual(val1,val2))||(!areObjects&&val1!==val2)){returnfalse;}}}returntrue;};console.log(jsonEqual(article1,article2));//trueconsole.log(jsonEqual(a,b));//trueconsole.log(isEqual(a,b));//trueconsole.log(isEqual(article1,article2));//true

当然也可以使用第三方库来实现,Lodash是最实用的JavaScript库之一,拥有大量的函数特性集,像数组、对象、字符串、数字等类型的常见处理函数,语法上面通俗易懂 。

const_=require("lodash");constarticle1={title:"JavaScript对象相等",summary:"一起来回顾一下如何比较两个对象相等",};constarticle2={title:"JavaScript对象相等",summary:"一起来回顾一下如何比较两个对象相等",};console.log(_.isEqual(article1,article2));//trueconstarrayArticle1=[{title:"JavaScript对象相等",summary:"一起来回顾一下如何比较两个对象相等",},];constarrayArticle2=[{title:"JavaScript对象相等",summary:"一起来回顾一下如何比较两个对象相等",},];console.log(_.isEqual(arrayArticle1,arrayArticle2));//true

总结

对于比较原始值,推荐使用 ===Object.js ,而对于引用类型的深度相等,简单的方式可以使用 JSON.stringify 转换为字符串再进行比较。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/JavaScript/680.html