手寫代碼之深度比較

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        var obj1={
            x:100,
            y:{
                a:100,
                b:200
            }
        };
        var obj2={
            x:100,
            y:{
                a:100,
                b:200
            }
        };
        console.log(isEqual(Number('wq'),Number('wq')));
        console.log(isEqual([1, 2, 3],{0: 1, 1: 2, 2:3}));



        function isObject(obj){
            if(typeof obj === 'object' && typeof obj!= null){
                return true;
            }
            return false;
        }
        function isArray(obj){
            return obj instanceof Array;
        }
        function isEqual(obj1,obj2){
            //類型比較
            // 若是又任何一方不是object,則自行比較
            if(!isObject(obj1) || !isObject(obj2)){
                // 用object.is()會更好,避免出現NaN===NaN爲false的狀況
                return Object.is(obj1) === Object.is(obj2);
                // return obj1===obj2;
            }
            if(isArray(obj1)!==isArray(obj2)){
                return false;
            }
            // 傳入的同一個對象
            if(obj1===obj2){
                return true;
            }
            // 長度比較
            var len1 = Object.keys(obj1).length;//[x,y]
            var len2 = Object.keys(obj2).length;//[x,y]
            if(len1!==len2){
                return false;
            }
            // 值比較
            for(var key in obj1){
                var result=isEqual(obj1[key],obj2[key]);
                if(!result){
                    return false;
                }
            }
            return true;
        }
    </script>
</body>
</html>
相關文章
相關標籤/搜索