实现一个函数 clone(obj),浅拷贝一个对象

推荐答案

-- -------------------- ---- -------
-------- ---------- -
    -- ---- --- ---- -- ------ --- --- --------- -
        ------ ----
    -
    --- ------ - ------------------ - -- - ---
    --- ---- --- -- ---- -
        -- ------------------------- -
            ----------- - ---------
        -
    -
    ------ -------
-

本题详细解读

1. 函数功能

clone(obj) 函数用于浅拷贝一个对象。浅拷贝意味着只复制对象的第一层属性,如果属性值是对象或数组,则复制的是引用,而不是深层次的拷贝。

2. 代码解析

  • 类型检查:首先检查传入的参数 obj 是否为 null 或者不是对象类型(如基本类型 string, number, boolean 等)。如果是,则直接返回 obj,因为这些类型的值本身就是不可变的,不需要拷贝。

  • 初始化结果对象:根据 obj 的类型(数组或普通对象),初始化 result 为一个空数组或空对象。

  • 遍历属性:使用 for...in 循环遍历 obj 的所有可枚举属性。通过 obj.hasOwnProperty(key) 确保只复制对象自身的属性,而不包括原型链上的属性。

  • 复制属性:将 obj 的每个属性值直接赋值给 result 的对应属性。由于是浅拷贝,如果属性值是对象或数组,则复制的是引用。

  • 返回结果:最后返回 result,即浅拷贝后的对象。

3. 示例

在这个示例中,copiedoriginal 的浅拷贝对象。copiedoriginal 是两个不同的对象,但它们的 b 属性引用的是同一个对象。

纠错
反馈