new对象发生了什么,深浅拷贝,cookie,letconst

70 阅读1分钟

image.png 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【是同一个引用】 深拷贝:是不同的引用

image.png cookie等共同点:在客户端存放数据,cookie可以设置过期时间,document.cookie="username=99"

let const声明 的变量有自身的作用域