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


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

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

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

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

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

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

    给一个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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    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
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

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

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

  • 相关阅读:
    推荐算法在商城系统实践
    环境响应性介孔二氧化硅复合微球/二氧化硅层状双氢氧化物微球的相关制备
    1.springcloudalibaba nacos2.2.3部署
    【业务功能篇 131】23种设计模式介绍
    jenkins中执行docker命令
    基于知识图谱建模、全文检索的智能知识管理库(源码)
    Python 获取 NCBI 基因名 SSL 证书出现异常?
    我们不一样①
    ubuntu下Anaconda环境安装GPU的pytorch(docker镜像)
    Python+Requests+Pytest+Excel+Allure 接口自动化测试项目实战【框架之间的对比】
  • 原文地址:https://blog.csdn.net/yunchong_zhao/article/details/133387473