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;
            }
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM