post和get的区别
1.用法不同, post一般是向服务器传输数据,get一般是向服务器获取数据,因为使用url传递数据
2.传输数据大小不同,post默认无限制传输大小,get不超过2kb
3.post为隐士传递,get为显示传递
this的理解
this是一个关键字,它代表函数运行时自动生成的一个内部函数,只能在函数内部使用
1.作为纯粹的函数调用this指向全局对象
2.作为对象的方法调用this指向调用函数
3.作为构造函数被调用this指向新的对象(new 会改变this 的指向)
4.apply调用,this指向apply方法的第一个参数
判断数组
1.[ ] instanceof Array true/false
2.arr.constructor == Array true/false
3.Array.isArray() true/false
4.Object.prototype.toString.call([ ]) === '[ Object Array]' true/false
浅克隆
var lilei = {
sname: "lilei",
sage: 20,
intr() {
console.log(`我是${this.sname},今年${this.sage}`);
}
}
// lilei.intr()
function clone(obj) {
var newObj = {};
for (var key in obj) {
newObj[key] = obj[key];
}
return newObj;
}
var hmm = clone(lilei);
console.log(hmm);
深克隆
function checkType(data) { // 用来判断被拷贝对象数据类型的函数
return Object.prototype.toString.call(data).slice(8, -1)
}
function deepClone(target) { // 实现深度拷贝的函数
var result, targetType = checkType(target);//Array Object
if (targetType === 'Object') { // 只有对象和数组才进行深度拷贝
result = {}
} else if (targetType === 'Array') {
result = []
} else {//如果return 证明target是基本数据类型,并且将整个函数结束了
return target
}
for (var i in target) { // i为对象的key或数组的下标
//获取属性名为i的属性值
var value = target[i]
// 检测当前属性的类型
var valueType = checkType(value);//String Number Array
if (valueType === 'Object' || valueType === 'Array') {
result[i] = deepClone(value) // 当拷贝的对象中还有数组或是对象时进行递归,克隆它们中的内容,直到递归完所有数组或对象为止
} else {
result[i] = value
}
}
return result // 返回最终的结果
}
var arr = [1,2,{username:"xiaohu"}]
var arr2 = deepClone(arr)
arr2[2].username = "dahu"
console.log(arr)
console.log(arr2)