1. JavaScript 中的 this 究竟指向谁,箭头函数的 this 有什么不同 普通函数
this 永远指向调用它的对象,new的时候,指向new出来的对 象。
箭头函数
箭头函数没有自己的 this,当在内部使用了this时,它会指向最近一层作用域内的 this
2. 深拷贝和浅拷贝的区别?如何实现?
两者的区别:一个对象浅复制后,是深层次的对象地址的复制,并没有开辟新的栈,也就是复制的结果是两个对象指向同一个地址,修改其中一个对象的属性,则另一个对象的属性也会发生改变,而深复制的则是开辟了一个新的栈,两个对象对应两个不同的地址,修改一个对象的属性,不会改变另一个对象的属性。
JSON.stringify与JSON.parse可以实现深拷贝,还可以借用JQ的extend方法。
JSON.stringify与JSON.parse实现深拷贝
function deepClone(obj){
let _obj = JSON.stringify(obj),
objClone = JSON.parse(_obj);
return objClone
}
let a=[0,1,[2,3],4],
b=deepClone(a);
a[0]=1;
a[2][0]=1;
console.log(a,b);
JQ的extend方法
let a=[0,1,[2,3],4],
b=$.extend(true,[],a);
a[0]=1;
a[2][0]=1;
console.log(a,b);
如何判断一个变量是否为数组(isArray)
1、instanceof
function isArray (obj) {
return obj instanceof Array;
}
2、Array对象的 isArray方法
function isArray (obj) {
return Array.isArray(obj);
}
3、Object.prototype.toString
function isArray (obj) {
return Object.prototype.toString.call(obj) === '[object Array]';
}