JS判断两个对象是否键值对应相等

        //isEqual:判断两个对象是否键值对应相等
        function isEqual(a,b){
            //如果a和b本来就全等
            if(a===b){
                //判断是否为0和-0
                return a !== 0 || 1/a ===1/b;
            }
            //判断是否为null和undefined
            if(a==null||b==null){
                return a===b;
            }
            //接下来判断a和b的数据类型
            var classNameA=toString.call(a),
                classNameB=toString.call(b);
            //如果数据类型不相等,则返回false
            if(classNameA !== classNameB){
                return false;
            }
            //如果数据类型相等,再根据不同数据类型分别判断
            switch(classNameA){
                case ‘[object RegExp]‘:
                case ‘[object String]‘:
                    //进行字符串转换比较
                    return ‘‘ + a ===‘‘ + b;
                case ‘[object Number]‘:
                    //进行数字转换比较,判断是否为NaN
                    if(+a !== +a){
                        return +b !== +b;
                    }
                    //判断是否为0或-0
                    return +a === 0?1/ +a === 1/b : +a === +b;
                case ‘[object Date]‘:
                case ‘[object Boolean]‘:
                    return +a === +b;
            }
            //如果是对象类型
            if(classNameA == ‘[object Object]‘){
                //获取a和b的属性长度
                var propsA = Object.getOwnPropertyNames(a),
                    propsB = Object.getOwnPropertyNames(b);
                if(propsA.length != propsB.length){
                    return false;
                }
                for(var i=0;i<propsA.length;i++){
                    var propName=propsA[i];
                    //如果对应属性对应值不相等,则返回false
                    if(a[propName] !== b[propName]){
                        return false;
                    }
                }
                return true;
            }
            //如果是数组类型
            if(classNameA == ‘[object Array]‘){
                if(a.toString() == b.toString()){
                    return true;
                }
                return false;
            }
        }

原文地址:https://www.cnblogs.com/lingtiaoti/p/12305402.html

时间: 2024-10-27 08:17:19

JS判断两个对象是否键值对应相等的相关文章

js判断两个对象是否相等

function isObjectValueEqual(a, b) { if(typeof a == 'number' && typeof b == 'number'){ return a == b } var aProps = Object.getOwnPropertyNames(a); var bProps = Object.getOwnPropertyNames(b); if (aProps.length != bProps.length) { return false; } for

判断两个对象内容相等

我们知道,如果两个对象即使内容,javascript也会判断它们不相等.但是有时候,我们仅仅需要判断两个对象的内容是否相等.那么我们应该如何做到且考虑周全呢?比如说0和-0,null和undefined,是不相等的,NaN和NaN默认是不相等的.我写了一个isEqual方法,考虑到了诸多方面,代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>&l

JavaScript判断两个对象内容是否相等

ES6中有一个方法判断两个对象是否相等,这个方法判断是两个对象引用地址是否一致 let obj1= { a: 1 } let obj2 = { a: 1 } console.log(Object.is(obj1, obj2)) // false let obj3 = obj1 console.log(Object.is(obj1, obj3)) // true console.log(Object.is(obj2, obj3)) // false 当需求是比较两个对象内容是否一致时就没用了. 想

js对象替换键值名称

js对象替换键值名称 将obj中的id和name字段替换分别替换成为"@id","@name" 代码如下: let obj = [{id:1,name:"张三"},{id:2,name:"李四"}].map(function (item) { return{ "@id":item.id, "@name":item.name } }) 对于对象 let obj = { id:1, name

【java】【反射】反射实现判断发生了修改操作,判断两个对象是否发生属性值的变更,判断两个List集合内对象的属性值是否发生变更

java的反射实现: 判断发生了修改操作,判断两个对象是否发生属性值的变更,判断两个List集合内对象的属性值是否发生变更 今日份代码: package com.sxd.streamTest; import java.lang.reflect.Field; import java.util.*; /** * @ClassName Test * @Description 判断发生了修改操作,判断两个对象是否发生属性值的变更,判断两个List集合内对象的属性值是否发生变更 * @Author sxd

如何判断两个对象相等

前言 虽然标题写的是如何判断两个对象相等,但本篇我们不仅仅判断两个对象相等,实际上,我们要做到的是如何判断两个参数相等,而这必然会涉及到多种类型的判断. 相等 什么是相等?在<JavaScript专题之去重>中,我们认为只要 === 的结果为 true,两者就相等,然而今天我们重新定义相等: 我们认为: NaN 和 NaN 是相等 [1] 和 [1] 是相等 {value: 1} 和 {value: 1} 是相等 不仅仅是这些长得一样的,还有 1 和 new Number(1) 是相等 'Cu

Java 判断两个对象是否相等

一.使用 == 与 equals == : 它的作用是判断两个对象的地址是不是相等.即,判断两个对象是不是同一个对象.(基本数据类型==比较的是值,引用数据类型==比较的是内存地址) equals() : 它的作用也是判断两个对象是否相等.但它一般有两种使用情况: 情况1:类没有覆盖equals()方法.则通过equals()比较该类的两个对象时,等价于通过"=="比较这两个对象. 情况2:类覆盖了equals()方法.一般,我们都覆盖equals()方法来两个对象的内容相等:若它们的

c#如何判断两个对象是否相等

在c#中判断对象相等,这是对引用类型进行判断,而不是对值类型,如果是对字符串,或者是数值进行判断相等只需要用==运算符就可以了. 对两个对象用==运算符,只能判断他们两个在内存中的地址是否一样的.  1.对一个类只实例化一次 向那些赋值来赋值去的引用如果没有new实例化一个对象的话,那么这些赋值来,赋值去的对象指向的都是同一地址.举一个例子有一个类People People p1=new People(); People p2=p1; People p3; p3=p2; 像这样对象p1 ,p2,

js中两个对象的比较

代码取自于underscore.js 1.8.3的isEqual函数. 做了一些小小的修改,主要是Function的比较修改. 自己也加了一些代码解读. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>js中两个对象的比较</title> <script> /* 需求难点描述: 数组和对象,都