1、原型链
原型链其实就是访问对象的某一属性或方法,它会在先在对象自身中查找,如果有则直接使用,如果没有则会去原型对象中寻找,直到找到object中依然没有找到,则返回underfined。
原型prototype
我们每创建一个函数,解析器都会向函数中添加一个prototype属性,这个属性对应着一个对象,这个对象就是我们所谓的原型对象。
- 如果函数作为普通函数调用prototype没有任何作用
- 作为构造函数调用,它所创建的对象都会有一个隐含的属性,指向该构造函数的原型对象,通过__proto__来访问该属性
- 原型对象就相当于一个公共的区域,所有同一个类的实例都可以访问这个原型对象,我们可以将对象中共有的内容,统一设置到原型对象中
- 当我们访问对象的一个属性或方法时,它会先在对象自身中寻找,如果有则直接使用,如果没有则会去原型对象中寻找
2、深拷贝和浅拷贝
深拷贝和浅拷贝是只针对Object和Array这样的引用数据类型的。
浅拷贝
概念:创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值,如果属性是引用类型,拷贝的就是内存地址 ,所以如果其中一个对象改变了这个地址,就会影响到另一个对象。
浅拷贝实现方法(Object.assign(),拓展运算符(...),Array.prototype.slice和Array.prototype.concat)
深拷贝:
概念:将一个对象从内存中完整的拷贝一份出来,从堆内存中开辟一个新的区域存放新对象,且修改新对象不会影响原对象。
深拷贝实现方法(递归遍历,JSON.pase(JSON.stringify()))
2、react中在那个生命周期可以访问到真实的dom
componentDidMount()
1、当前生命周期我们可以做前后端数据的交互
2、可以在当前生命周期中获取到真实的DOM 通过this.refs来获取9
3、一般情况下我们都在当前生命周期中做一些插件的实例化
3、数组去重
使用Array.from(new set());//Array.from方法可以将Set结构转换为数组结果
const unique = arr => { return Array.from(new Set(arr)) }
for循环嵌套//那就是创建一个新的空数组,每次我们会从原数组中取出一个元素,拿它和新数组的元素进行一一比较。如果在新数组没发现和取出元素相等的元素,就将其放入这个新数组中;如果发现有和取出元素相等的元素,不放入新数组中。当原数组中的数组全都取出来时,这个新数组就是去重后的所有数据了。
const unique = arr => {
let res = [];
arr.forEach(item => {
if (!res.includes(item)) res.push(item);
}
)
return res;
}
查找元素第一次出现的位置//数组从后面遍历,依次从前面对比原数组的每一个值,相同就删除当前元素
const unique = arr => {
for (let i = arr.length - 1; i >= 0; i--) {
for (let j = 0; j < i; j++) {
if (arr[j] === arr[i]) arr.splice(i, 1);
}
}
return arr;
}
cookie
使用document.cookie读写,cookie在浏览器窗口关闭,自动删除。如果要设置某一时间删除通过写入cookie的时候设置过期时间expires或者设置max-age(max-age小于0,默认浏览器关闭则删除,等于0立即删除,大于0表示cookie的存活时间)
document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 T";
document.cookie = "username=; Max-Age=0";