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>

运行效果图如下:

猜你喜欢

转载自blog.csdn.net/luyuehui520/article/details/82053849