判断对象相等
摘要:JS数组、对象的基本类型都是object,不同的是数组的原型是Array,而对象的原型是Object,因此区分一个变量是数组还是对象,只需使用instanceOf来判断他们的原型即可。而关于如何判断数组或对象是否相等,切记不能直接使用 “==”,“!=",”“===”,"!==",本文从引用、类型、值三个方面讲解数组和对象的相等性判断。
- 判断是否具有相同引用
判断两个对象或数组是否具有相同的引用,可以使用Object.is(a,b),具体使用如图,对于数组或对象,对于引用相同的会返回true,不同引用会返回false。
- 判断是否具有相同类型(基础类型和原型)
对于一个对象,我们可以使用toString方法来获取他们的基础类型与原型(数组使用toString返回的是数组元素字符串),toString返回的是一个形如’[“object”,“Object”]'的字符串,由于字符串是不可变量,所以我们可以直接使用"==="来比较,所以判断类型可以使用如下(其实这和同时使用typeof 和instanceof 具有一样的效果):
- 判断是否具有相同的值
这一部分介绍如何判断两个对象或数组具有相同的值,对于数组,在第2部分提起过,数组调用toString结果是它的字符串值,所以我们可以直接通过toString来判断数组值是否相等,这里给出与“===”对比例子:
那么要如何才能判断对象值相等呢?相对较麻烦的做法是自己写一个eq函数,逐个判断对象键值,对于值是对象的递归判断。一种偷鸡的做法是直接使用JSON.stringify将对象转化为JSON字符串,然后直接判断字符串是否相等即可。