推荐答案
-- -------------------- ---- ------- -------- ---------- - -- ---- --- ---- -- ------ --- --- --------- - ------ ---- - --- ------ - ------------------ - -- - --- --- ---- --- -- ---- - -- ------------------------- - ----------- - --------- - - ------ ------- -
本题详细解读
1. 函数功能
clone(obj)
函数用于浅拷贝一个对象。浅拷贝意味着只复制对象的第一层属性,如果属性值是对象或数组,则复制的是引用,而不是深层次的拷贝。
2. 代码解析
类型检查:首先检查传入的参数
obj
是否为null
或者不是对象类型(如基本类型string
,number
,boolean
等)。如果是,则直接返回obj
,因为这些类型的值本身就是不可变的,不需要拷贝。初始化结果对象:根据
obj
的类型(数组或普通对象),初始化result
为一个空数组或空对象。遍历属性:使用
for...in
循环遍历obj
的所有可枚举属性。通过obj.hasOwnProperty(key)
确保只复制对象自身的属性,而不包括原型链上的属性。复制属性:将
obj
的每个属性值直接赋值给result
的对应属性。由于是浅拷贝,如果属性值是对象或数组,则复制的是引用。返回结果:最后返回
result
,即浅拷贝后的对象。
3. 示例
const original = { a: 1, b: { c: 2 } }; const copied = clone(original); console.log(copied); // { a: 1, b: { c: 2 } } console.log(copied === original); // false console.log(copied.b === original.b); // true
在这个示例中,copied
是 original
的浅拷贝对象。copied
和 original
是两个不同的对象,但它们的 b
属性引用的是同一个对象。