我去面试的时候会问这个问题, 而且发现不管是初级还是工作一段时间的小伙伴 都会说的不是很清晰
比如第一道题哈:
首先大部分人都会想起来 我们用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
}
无论是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
}
不要生搬硬套 最好加入自己的理解哈。
关注我 持续更新 前端知识。