淺拷貝和深拷貝(遞歸)
淺拷貝
適用場(chǎng)景:只能復(fù)制一維的數(shù)據(jù)形式
一維數(shù)據(jù):例如數(shù)組的元素都是簡(jiǎn)單類型,例如對(duì)象的屬性值都是簡(jiǎn)單類型
實(shí)現(xiàn)方式:
數(shù)組方法:slice()
數(shù)組和對(duì)象進(jìn)行遍歷拷貝操作
varobj={
name:'jack',
age:18
};
varobj2={};
// 封裝一個(gè)用來進(jìn)行對(duì)象淺拷貝的函數(shù)
// - current參數(shù) 表示被復(fù)制的對(duì)象
// - target參數(shù) 表示拷貝給那個(gè)對(duì)象
// - 使用要求:current和target必須都是對(duì)象才可以使用
functioncopy(current,target){
for(varkincurrent){
target[k]=current[k];
}
}
copy(obj,obj2);
深拷貝
適用場(chǎng)景:可以對(duì)復(fù)雜類型進(jìn)行完全拷貝
設(shè)置時(shí)與淺拷貝的區(qū)別
需要先檢測(cè)屬性時(shí)是簡(jiǎn)單類型或復(fù)雜類型
對(duì)復(fù)雜類型進(jìn)行具體檢測(cè):檢測(cè)時(shí)數(shù)組或?qū)ο?/p>
通過遞歸調(diào)用,拷貝復(fù)雜類型數(shù)據(jù)
// - current參數(shù) 表示被復(fù)制的對(duì)象// - target參數(shù) 表示拷貝給那個(gè)對(duì)象// - 使用要求:current和target必須都是對(duì)象才可以使用
functioncopy(current,target){
for(varkincurrent){
// 深拷貝時(shí),需要判斷當(dāng)前屬性時(shí)是簡(jiǎn)單類型或復(fù)雜類型,再進(jìn)行分別處理即可
// - typeof可以檢測(cè)簡(jiǎn)單類型,復(fù)雜類型的結(jié)果為'object',null也為'object'
if(typeofcurrent[k]==='object'&¤t[k]!==null){
// 對(duì)復(fù)雜類型屬性值的處理
// console.log(current[k], '復(fù)雜類型值');
// 調(diào)用copy函數(shù),將current[k]拷貝給target[k]
// - 對(duì)復(fù)雜類型值進(jìn)行具體的數(shù)組和對(duì)象檢測(cè)操作
target[k]=current[k].constructor===Array?[]:{};
copy(current[k],target[k]);
}else{
// 對(duì)簡(jiǎn)單類型屬性值的處理
target[k]=current[k];
// console.log(current[k], '簡(jiǎn)單類型值');
}
}
}
jQuery插件的設(shè)置方式
學(xué)習(xí)jQuery插件的設(shè)置方式,實(shí)際上就是學(xué)習(xí)如何給jQuery對(duì)象設(shè)置方法
設(shè)置方式:
單個(gè)設(shè)置: $.fn.方法名 = function () { 實(shí)現(xiàn)功能的具體代碼; };
多個(gè)設(shè)置:
$.fn.extend({ 設(shè)置多個(gè)方法,用來實(shí)現(xiàn)插件功能 })
$.fn.extend({
sayHi:function(){
console.log('sayHi');
},
sayHehe:function(){
console.log('sayHehe');
}
});
正則表達(dá)式
簡(jiǎn)介
正則表達(dá)式是一組用來進(jìn)行字符串處理的工具。
創(chuàng)建方式:
構(gòu)造函數(shù)創(chuàng)建方式: new RegExp('正則代碼');
正則字面量形式: /正則代碼/