浅拷贝和深拷贝(递归)
浅拷贝
适用场景:只能复制一维的数据形式
一维数据:例如数组的元素都是简单类型,例如对象的属性值都是简单类型
实现方式:
数组方法:slice()
数组和对象进行遍历拷贝操作
varobj={
name:'jack',
age:18
};
varobj2={};
// 封装一个用来进行对象浅拷贝的函数
// - current参数 表示被复制的对象
// - target参数 表示拷贝给那个对象
// - 使用要求:current和target必须都是对象才可以使用
functioncopy(current,target){
for(varkincurrent){
target[k]=current[k];
}
}
copy(obj,obj2);
深拷贝
适用场景:可以对复杂类型进行完全拷贝
设置时与浅拷贝的区别
需要先检测属性时是简单类型或复杂类型
对复杂类型进行具体检测:检测时数组或对象
通过递归调用,拷贝复杂类型数据
// - current参数 表示被复制的对象// - target参数 表示拷贝给那个对象// - 使用要求:current和target必须都是对象才可以使用
functioncopy(current,target){
for(varkincurrent){
// 深拷贝时,需要判断当前属性时是简单类型或复杂类型,再进行分别处理即可
// - typeof可以检测简单类型,复杂类型的结果为'object',null也为'object'
if(typeofcurrent[k]==='object'&¤t[k]!==null){
// 对复杂类型属性值的处理
// console.log(current[k], '复杂类型值');
// 调用copy函数,将current[k]拷贝给target[k]
// - 对复杂类型值进行具体的数组和对象检测操作
target[k]=current[k].constructor===Array?[]:{};
copy(current[k],target[k]);
}else{
// 对简单类型属性值的处理
target[k]=current[k];
// console.log(current[k], '简单类型值');
}
}
}
jQuery插件的设置方式
学习jQuery插件的设置方式,实际上就是学习如何给jQuery对象设置方法
设置方式:
单个设置: $.fn.方法名 = function () { 实现功能的具体代码; };
多个设置:
$.fn.extend({ 设置多个方法,用来实现插件功能 })
$.fn.extend({
sayHi:function(){
console.log('sayHi');
},
sayHehe:function(){
console.log('sayHehe');
}
});
正则表达式
简介
正则表达式是一组用来进行字符串处理的工具。
创建方式:
构造函数创建方式: new RegExp('正则代码');
正则字面量形式: /正则代码/