• 前端面试题: 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

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

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

  • 相关阅读:
    值得收藏的一些Java实战项目分享
    Xilinx FPGA SPIx4 配置速度50M约束语句(Vivado开发环境)
    Golang 中的 Context 包
    如何更改表单必填红星的位置
    php实验室安全系统的设计与实现毕业设计-附源码191610
    数据结构(Java):顺序表&集合类ArrayList
    y120.第七章 服务网格与治理-Istio从入门到精通 -- Istio流量治理快速入门(六)
    基于SSM的工资管理系统
    云行 | 让数据奔驰在“云”间,天翼云助力贵州筑牢算力底座
    springcloud入门
  • 原文地址:https://blog.csdn.net/yunchong_zhao/article/details/133387473