function Fun() {
};Object.prototype.run='5';obj.proto.proto .run='6';const obj=new Fun();console.log(obj.proto.proto===Object.prototype) 深浅拷贝: 递归复制所有层级的对象和嵌套对象,完全断开与原对象的引用关系 浅拷贝对字符串安全,但对嵌套对象危险,因为:
- 字符串是 值拷贝,互不影响;
- 对象是 引用拷贝,共享内存。
const original = ["A", "B", "C"]; // 纯字符串数组
const shallowCopy = [...original]; // 浅拷贝
// 修改新数组
shallowCopy[0] = "X"; // 修改第一层的字符串
内存变化
复制
原始数组 original: ["A", "B", "C"]
浅拷贝 shallowCopy: ["X", "B", "C"]
- 字符串
"A"和"X"是独立的值,修改shallowCopy不会影响original。 - 原因:字符串是不可变的基本类型,赋值时直接复制值。
4. 嵌套对象/数组的数组(不安全,会污染)
示例代码
javascript
复制
const original = [{ name: "Alice" }, "B"]; // 含嵌套对象的数组
const shallowCopy = [...original]; // 浅拷贝
// 修改新数组中的嵌套对象
shallowCopy[0].name = "Bob";
内存变化
复制
原始数组 original: [ <ref1>, "B" ]
浅拷贝 shallowCopy: [ <ref1>, "B" ]
↑
共享同一个对象 { name: "Bob" }
shallowCopy[0]和original[0]指向同一个对象,修改其中一个会影响另一个。- 原因:浅拷贝只复制了对象的引用(内存地址),而非对象本身。 浅拷贝:赋值;OBject.assign【是同一个引用】 深拷贝:是不同的引用
cookie等共同点:在客户端存放数据,cookie可以设置过期时间,document.cookie="username=99"
let const声明 的变量有自身的作用域