オブジェクトの深さクローン

1183 ワード

こんなことがあったかどうか
let obj={name:'test',age:1}_obj.age=2 consolie.logs(obj.age)// 2 consolie.logs(_obj.age)// 2javascriptのメモリメカニズムによって、クローンオブジェクトには浅いクローンがあります.私たちはポインタをコピーしただけです.彼らが指している住所は同じです.
深さクローン
  • let obj = {
            name: 'test',
            age: 1
          }
    function cloneObj(obj) {
            let newObj = obj.constructor === Array ? [] : {}
            if (typeof obj !== 'object') {
              return
            } else {
              let str = JSON.stringify(obj)
              newObj = JSON.parse(str)
            }
            return newObj
        }
          const _obj = this.clone(obj)
          _obj.age = 2
          console.log(obj.age) // 1
          console.log(_obj.age) // 2
    
  • function clone(obj) {
            let newObj = obj.constructor === Array ? [] : {}
            for (let key in obj) {
              newObj[key] = obj[key]
            }
            return newObj
          }
    
  • let a = {
            name: 'a',
            age: 11
          }
          let b = Object.assign({}, a)
          b.name = 'b'
          console.log(a.name) // a
          console.log(b.name) // b
    
    退勤します.ここまで書きます.