js的數(shù)據(jù)類型
主要分兩大類:基本數(shù)據(jù)類型和引用數(shù)據(jù)類型。
基本數(shù)據(jù)類型有:
Srting/Number/Null/undefine/Boolean? 占用內(nèi)存大小確定,保存在棧內(nèi)。
引用數(shù)據(jù)類型:
Object/Array? 占用內(nèi)存大小不確定,保存在堆內(nèi)。
深拷貝的方法
1.?JSON.parse(JSON.stringify(obj))
比較日常又比較dirty的方法,適合json可以解讀的數(shù)據(jù)
2.利用lodash里的_.cloneDeep
import? "_" from lodash;
let obj = {name:'zs',age:12};
let obj2 = _.cloneDeep(obj);
obj2.name = 'ls'
console.log(obj,ojb1)
//{name:'zs',age:12},{name:'ls',age:12}
3.jQuery —— $.clone() / $.extend()
4.實(shí)現(xiàn)一個(gè)深拷貝的方法
function?deepCopy?(obj)?{
?var?result;
?//引用類型分?jǐn)?shù)組和對(duì)象分別遞歸
?if?(Object.prototype.toString.call(obj)?==?'[object Array]')?{
?result?=?[]
?for?(i?=?0;?i?<?obj.length;?i++)?{
?result[i]?=?deepCopy(obj[i])
?}
?}?else?if?(Object.prototype.toString.call(obj)?==?'[object Object]')?{
?result?=?{}
?for?(var?attr in obj)?{
?result[attr]?=?deepCopy(obj[attr])
?}
?}
?//值類型直接返回
?else?{
?return?obj
?}
?return?result
}