笔记

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)
原文地址:https://www.cnblogs.com/zhanghaifeng123/p/11414130.html