1. 程式人生 > >JS判斷兩個物件內容是否相等的方法示例

JS判斷兩個物件內容是否相等的方法示例

這篇文章主要介紹了JS判斷兩個物件內容是否相等的方法,結合具體例項形式分析了javascript針對字串、陣列及物件的相關判斷技巧,需要的朋友可以參考下

本文例項講述了JS判斷兩個物件內容是否相等的方法。分享給大家供大家參考,具體如下:

我們知道,如果兩個物件即使內容,JavaScript也會判斷它們不相等。但是有時候,我們僅僅需要判斷兩個物件的內容是否相等。那麼我們應該如何做到且考慮周全呢?比如說0和-0,null和undefined,是不相等的,NaN和NaN預設是不相等的。我寫了一個isEqual方法,考慮到了諸多方面,程式碼如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title></title>

</head>

<body>

</body>

<script type="text/javascript">

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

}

}

//test

var obj1={name:"liu",age:22};

var obj2={name:"liu",age:22};

var obj3={name:"liu",age:33};

var state1=isEqual(obj1,obj2);

var state2=isEqual(obj1,obj3);

console.log(state1);//true

console.log(state2);//false

var state3=isEqual(null,undefined);

console.log(state3);//false

var state4=isEqual(NaN,NaN);

console.log(state4);//true

var arr1=[1,2,3];

var arr2=[1,2,3];

var arr3=[1,23];

var state5=isEqual(arr1,arr2);

console.log(state5);//true

var state6=isEqual(arr1,arr3);

console.log(state6);//false

</script>

</html>

執行效果圖如下: