-路漫漫其修遠兮,我將上下而求索。前端
在JavaScript數據類型分爲基礎類型和引用類型,而引用類型又稱爲對象,可見了解對象是咱們真正掌握JavaScript語言的必備技能。本章主要與你們一塊兒去探索JavaScript對象的一些常常被咱們忽略的以及難以理解的知識。好了,廢話很少說讓咱們一塊兒進入JavaScript對象的世界吧。編程
let a={
val:"test"
}
console.log(a.val)//"test"
let b=a
b.val="test2"
console.log(a.val)//"test2"
console.log(b.val)//"test2"
複製代碼
這也是致使前端顯示異常的根本緣由之一json
let a={
val:'test'
}
let b=JSON.parse(JSON.stringfy(a))
複製代碼
優勢:操做簡單。數組
缺點:1.若是對象很大會佔用內存 2.對於複雜的對象類型(即屬性是諸如 Map, Set, RegExp, Date, ArrayBuffer,function和其餘內置類型),在進行序列化時會丟失。 丟失屬性。3.沒法進行對象的循環處理。bash
let originobj= {
'name': 'test',
'weight': 50
};
let newobj = Object.assign({}, originobj, {
'test': '111'
});
newobj.age = 60;
console.log('originobj', originobj); //{name: "test", weight: 50}
console.log('newobj', newobj); //{name: "test", weight: 50, test: "111", age: 60}
複製代碼
優勢:方便快捷 不會丟失原數據 缺點:只能複製簡單的對象(),即Object.assign()拷貝的只是屬性值 注意:若是對象中的屬性仍是對象則Object.assign()不會進行值拷貝,只能進行引用拷貝編程語言
function cloneDeep(newobj={},originObj){
for(let key in originObj){
//判斷是不是對象類型
if(originObj[key] && originObj[key] instanceof object){
//遞歸將對象類型賦值給新數組
newobj[key] = cloneDeep(originObj[key])
}else{
newobj[key] = originObj[key]
}
}
return newobj
}
let obj = {a:{b:'test'},c:"test2"}
//此時徹底copy了obj的值
let obj1 = cloneDeep(obj)//{a:{b:'test'},c:"test2"}
複製代碼
在編程的世界中熟悉某一門語言的基本要求就是掌握這門語言定義的數據類型,不一樣的語言中所定義的數據類型每每不一樣。這也是咱們同時掌握多中編程語言的難點。但幸運的是他們底層設計原理都是相互借鑑的,這也成爲了咱們可以掌握奪門語言的關鍵點之一。ui