isEqual ,判斷兩個對象或變量是否相等


 1 function isEqual(a, b) {
 2     //如果a和b本來就全等
 3     if (a === b) {
 4         //判斷是否為0和-0
 5         return a !== 0 || 1 / a === 1 / b;
 6     }
 7     //判斷是否為null和undefined
 8     if (a == null || b == null) {
 9         return a === b;
10     }
11     //接下來判斷a和b的數據類型
12     var classNameA=toString.call(a),
13         classNameB=toString.call(b);
14     //var classNameA = typeof(a), (兼容IE的寫法)
15         //classNameB = typeof(b);
16     //如果數據類型不相等,則返回false
17     if (classNameA !== classNameB) {
18         return false;
19     }
20     if (a instanceof Date)
21     {
22         classNameA = '[object Date]';
23     }
24 
25     //如果數據類型相等,再根據不同數據類型分別判斷
26     switch (classNameA) {
27         case '[object RegExp]':
28         case '[object String]':
29         case 'string':
30             //進行字符串轉換比較
31             return '' + a === '' + b;
32         case 'number':
33         case '[object Number]':
34             //進行數字轉換比較,判斷是否為NaN
35             if (+a !== +a) {
36                 return +b !== +b;
37             }
38             //判斷是否為0或-0
39             return +a === 0 ? 1 / +a === 1 / b : +a === +b;
40         case '[object Date]':
41         case '[object Boolean]':
42         case 'boolean':
43             return +a === +b;
44     }
45     //如果是對象類型
46     if (classNameA == '[object Object]' || classNameA=='object') {
47         //獲取a和b的屬性長度
48         var propsA = Object.getOwnPropertyNames(a),
49             propsB = Object.getOwnPropertyNames(b);
50         if (propsA.length != propsB.length) {
51             return false;
52         }
53         for (var i = 0; i < propsA.length; i++) {
54             var propName = propsA[i];
55             //如果對應屬性對應值不相等,則返回false
56             if (a[propName] !== b[propName]) {
57                 return false;
58             }
59         }
60         return true;
61     }
62     //如果是數組類型
63     if (classNameA == '[object Array]') {
64         if (a.toString() == b.toString()) {
65             return true;
66         }
67         return false;
68     }
69 }

 


免責聲明!

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



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