这里需要理解的是基本类型,和对象 用 java 的话说就是(讲道理 js 理论应该类似) ,基本类型在栈区,可以直接比较其值,
对象类型 存放于栈区 和 堆区,栈区存放的是对象在堆区的内存地址,直接对比相当于在对比地址,那么两个不同对象的地址必然不同
那么 ,我们先来看看 js 中关于 基本类型的对比方式 (讲道理java差不多,很尴尬的就是一个后端没有系统性学习前端,那么就会出现,各种把东西往后端上套的做法,实数无奈)
1. == 运算符会对它两边的操作数做隐式类型转换 如此就会出现 null == false == undefined == '' true == 1 == '1' 等等
2. === 运算符不会对两边的值进行转换,且他要求两边的值 类型 及 值 完全一致 +0 === -0 true,但 NaN === NaN 为 false
3. Object.is 需要注意的是 Object.is(NaN,NaN) true; Object.is(+0, -0) false;
对比对象是否相同就不能用上面的方式了,否则会一直在对比两个对象的内存地址串
那么,对比对象的思路是什么呢
1,首先对比两个对象的 key 长度是否一致,这个很容易刷下一批,当然也分场景,比如这些对象都来自后端的一个 bean 或者 entity 或者叫 POJO ,此时就不需要对比
2,然后 在用其中一个对象的 key 对应的 val ,对比另一个对象该 key 值对象的 val 是否相等,此时会触发递归,因为对象的属性值也可能是一个对象,StackOverflowException 小心哦
当然也分场景,若是和 1 中后面场景相同,那么,返回的对象中属性顺序也应该是相同的,若是后端没有特殊处理的话,直接取自数据库,那么简便方法是对比两个对象 JSON.stringfy(Obj)
标签:对象,Object,NaN,js,一致,类型,对比 From: https://www.cnblogs.com/ygrzzttzjzzzszz/p/17215384.html