型別
深拷貝: 值的完全拷貝
淺拷貝實現
深拷貝實現
//物件深拷貝
function
deepclone
(origin,target)
,//判斷是否為引用資料型別
tostr = object.prototype.tostring,
arrtype=
'[object array]'
;for
(let key in origin)
else;}
deepclone
(origin[key]
,tar[key]);
}else}}
return tar;
}
immutable.js 【 效能最好的 】
const _ = require( 『loadsh』 )
const state = ,
arr: [1,2,3 ]
}const newstate = _.clonedeep( state ) // 這種方式逐層遞迴,要遍歷每乙個節點,是很消耗效能的
newstate.str = 「路過的假面騎士mmr」
newstate.obj.x = 1000
newstate.arr[ 0 ] = 2000
console.log( state )
const = require(『immutable』)
/* map作用就是可以幫助我們建立乙個 immutable 物件 */
var obj = // state.name
const state = map(
})/* 每一次的改變都會生成新的immutable物件 */
const newstate = state.set(『age』, 20 ) // 新的immutable物件
// console.log( state === newstate ) false
// console.log( state.get(『name』) )
// console.log( newstate.get(『name』) )
const state2 = newstate.set(『name』,『路過的假面騎士mmr』)
console.log( newstate.get(『name』) )
console.log( state.get(『name』) )
console.log( state2.get(『name』) )
console.log( map.ismap( state2 ))
console.log( map.ismap( obj ))
const = require( 『immutable』 )
const arr = list([ 1,2,3,4 ]) // immutable陣列
const newarr = arr.push( 5 ) // 通過陣列的方法來生成新的immutable陣列
console.log( arr.get[ 0 ] ) // undefined
console.log( newarr.get[ 4 ] ) // undefined
console.log( arr.get( 0 ) ) // 1
console.log( newarr.get( 4 ) ) // 5
console.log( arr.size ); // 4 size輸出的是immutable陣列長度
console.log( newarr.size ); // 5
const = require(『immutable』)
const state1 = map()
const state2 = map()
console.log( is( state1,state2 ) )
const arr = list([1, 『a』, true,null, undefined])
const arr2 = list([1, 『a』, true,null, undefined])
console.log( is( arr,arr2 ) )
// var arr = [ 1, 『a』, true,null, undefined ]
// var arr2 = [ 1, 『a』, true,null, undefined ]
// console.log( arr.sort().tostring() === arr2.sort().tostring() )
前端深拷貝與淺拷貝
前端深拷貝與淺拷貝 1.淺拷貝 var obj1 var obj2 obj1 obj2.a 5 console.log obj1.a 5 console.log obj2.a 52.深拷貝 只能拷貝一層 var obj1 var obj2 object.assign obj1 obj2.c 1 5 ...
前端 js 深淺拷貝
我們了解到物件 引用 型別在賦值的過程中其實是複製了位址,從而會導致改變了一方其他也都被改變的情況。通常在開發中我們不希望出現這樣的問題。let a let b a a.age 2 console.log b.age 2 希望是1let a let b a a.obj.aa 5 console.lo...
前端的深拷貝和淺拷貝 前端面試 深拷貝和淺拷貝
面試題目 如何實現對乙個陣列或物件的淺拷貝和深拷貝?wtf,複製還分兩種,第一次遇到這種問題的時候很是無語呢,先來看看一般的答案的理解。淺拷貝是只拷貝一層,深層次的物件級別就只拷貝引用。深拷貝是拷貝多層,每一級別的資料都拷貝出來。也就是說,基本資料型別其實不存在深淺拷貝的問題,只有物件和陣列才存在深...