深拷贝浅拷贝/原型/类型校验/递归深拷贝
程序员文章站
2022-03-12 21:00:28
浅拷贝:浅拷贝是只拷贝一层,深拷贝是蹭蹭拷贝 将对象的每个属性进行依次复制,当对象的属性是引用类型时实质复制是其引用,当引用指向的值改变也会发生改变深拷贝:复制变量值,对于非基本变量,则递归基本变量后在复制,深拷贝后的对象与原来对象完全隔离不互相影响对一个对象进行修改不会影响另一个对象**浅拷贝:**let a=[0,1,2,3,4], b=a;console.log(a===b);a[0]=1;console.log(a,b);**递归深拷贝**:function d...
浅拷贝:
浅拷贝是只拷贝一层,深拷贝是蹭蹭拷贝 将对象的每个属性进行依次复制,当对象的属性是引用类型时实质复制是
其引用,当引用指向的值改变也会发生改变
深拷贝:
复制变量值,对于非基本变量,则递归基本变量后在复制,深拷贝后的对象与原来对象完全隔离不互相影响对一个对象
进行修改不会影响另一个对象
**浅拷贝:**
let a=[0,1,2,3,4],
b=a;
console.log(a===b);
a[0]=1;
console.log(a,b);
**递归深拷贝**:
function deepClone(obj){
let objClone = Array.isArray(obj)?[]:{};
if(obj && typeof obj==="object"){
for(key in obj){
if(obj.hasOwnProperty(key)){
//判断ojb子元素是否为对象,如果是,递归复制
if(obj[key]&&typeof obj[key] ==="object"){
objClone[key] = deepClone(obj[key]);
}else{
//如果不是,简单复制
objClone[key] = obj[key];
}
}
}
}
return objClone;
}
let a=[1,2,3,4],
b=deepClone(a);
a[0]=2;
console.log(a,b);
原型
原型: 每个函数都有一个prototype显示原型 每个实例都有一个proto隐式原型 实例中的隐式原型指向构造中的显示原型
原型链: 获取对象属性时,如果对象本身没有这个属性那么会去他的原型_proto_上去找,如果找不到就会去原型的原型找,一
直到最顶层 object.prototype为止
类型校验
方法: typeof、instanceof、constructor、Object.prototype.toString.call()、jquery.type()
console.log(typeof 20, //"number"
typeof 'abc', //"string"
typeof [1,2,3], //"object"
);
instanceof
console.log(
null instanceof Object, //false
[1,2,3] instanceof Array, //true
{a:1,b:2,c:3} instanceof Object, //true
)
constructor
console.log(new Number(123).constructor)
Object.prototype.toString.call()
toString.call(123); //"[object Number]"
toString.call('abcdef'); //"[object String]"
toString.call([1, 2, 3, 4]); //"[object Array]"
jquery.type()
jQuery.type() === "undefined"
jQuery.type( null ) === "null"
jQuery.type( true ) === "boolean"
jQuery.type( function(){} ) === "function"
本文地址:https://blog.csdn.net/zkl865748013/article/details/112585460