前端面试题: js中对比两个对象的值是否相等? for..in 和 for...of的区别?

我去面试的时候会问这个问题, 而且发现不管是初级还是工作一段时间的小伙伴 都会说的不是很清晰
比如第一道题哈:
首先大部分人都会想起来 我们用JSON.stringify() 进行转换,查看两个是否相等

你敢说我下面的对象 值不是想等的吗。 但是你用JSON.stringify之后发现确实是不想等的。因为对象的key是无序的

const obj1 = { a: 1, b: 2}
const obj2 = {b: 2, a: 1}

‘这个时候我们就需要用递归来处理了。我其实也不是让你现场写出来 但是你要有思路哈
而且也不用考虑那些 null 或者 函数,正则这些 只要考虑深层普通对象的比较即可

比如, 判断下面的对象值是否相等

const obj1 = { a: 1, b: { c: 2}}
const obj1 = { a: 1, b: { c: 3}}

给一个chargpt写的代码哈

function compareObject(obj1, obj2) {
  if(obj1 === obj2) return true
  if (typeof obj1 !== "object" || obj1 === null || typeof obj2 !== "object" || obj2 === null) {
    return false;
  }
  const keys1 = Object.keys(obj1)
  const keys2 = Object.keys(obj2)
  if(keys1.length != keys2.length) return false
  for(let item of keys1) {
   if(!keys2.includes(item) || !compareObject(obj1[item], obj2[item])) return false
  }
  return true
}
  1. 还有一个就是 for…in 和for of的区别。
    大多数人会说出。一个遍历对象 一个遍历数组 如果大多数人都能说出来这个 那么你和他们的区别 就不大了 如何让我选择你呢
    贴出来 下面这段话。可以作为理解和参考哈

无论是for…in还是for…of语句都是迭代一些东西。它们之间的主要区别在于它们的迭代方式。

for…in 语句以任意顺序迭代对象的可枚举属性。

for…of 语句遍历可迭代对象定义要迭代的数据。

以下示例显示了与Array一起使用时,for…of循环和for…in循环之间的区别。

Object.prototype.objCustom = function () {};
Array.prototype.arrCustom = function () {};

let iterable = [3, 5, 7];
iterable.foo = "hello";

for (let i in iterable) {
  console.log(i); // logs 0, 1, 2, "foo", "arrCustom", "objCustom"
}

for (let i in iterable) {
  if (iterable.hasOwnProperty(i)) {
    console.log(i); // logs 0, 1, 2, "foo"
  }
}

for (let i of iterable) {
  console.log(i); // logs 3, 5, 7
}

不要生搬硬套 最好加入自己的理解哈。

关注我 持续更新 前端知识。

你可能感兴趣的:(前端,javascript,开发语言)