推荐答案
// www.javascriptcn.com code example
function clone(obj) {
if (obj === null || typeof obj !== 'object') {
return obj;
}
let result = Array.isArray(obj) ? [] : {};
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
result[key] = obj[key];
}
}
return result;
}本题详细解读
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 属性引用的是同一个对象。