老师,如果要判断传入的参数是否都是对象或者是否都是数组,要怎么写呢?

来源:18-3 题目讲解-2:手写深度比较 isEqual

一里情书

2021-01-18

总觉得我这段代码里的判断有点笨,这样写有问题吗?有其他判断方式吗?

function isObject(obj){
  return obj != null && typeof obj === 'object' ;
}
function isArray(obj){
	return Array.isArray(obj)
}
function isEqual(obj1,obj2){
  //判断传入参数是否为数组或对象
  if(!isObject(obj1) || !isObject(obj2)){
    return obj1 === obj2
  }
  //判断传入参数是否同时为数组或对象
  if((!isArray(obj1) && isArray(obj2)) || (isArray(obj1) && !isArray(obj2))){
    console.log(1)
    return false
  }
  if(obj1 === obj2){
    return true
  }
  if(Object.keys(obj1).length !== Object.keys(obj2).length){
    return false
  }
  for(let key in obj1){
    const result = isEqual(obj1[key],obj2[key])
    if(!result) return false
  }
  return true
}
const obj1=[1,2,3]
const obj2={
    0:1,
    1:2,
    2:3
    }
console.log(isEqual(obj1,obj2)) //加上数组判断后,为false;没加上判断为true
写回答

1回答

双越

2021-01-19

把判断参数的代码,单独抽离出来,放在一个独立的函数中,就会好很多。

0
0

一天时间高效准备前端技术一面 匹配大厂面试要求

针对时下面试高频考点,帮助新人js面试快速通关

4694 学习 · 1681 问题

查看课程