值类型与引用类型有什么区别?
哪些类型是值类型?哪些类型是引用类型
值类型:String、Number、BOOlean、Symbol 引用类型:JSON、Array、null
let a = 10;
let b = a 直接给两个值互相没有关系
let obj = {name:'miaomioa'}
let obj2 = obj 改变obj1就会影像obj2,改变obj2就会影像obj;互相影像
手写深拷贝(克隆)
如何实现深拷贝
- JSON.parse(JSON.stringfy(obj)) 不能存放函数,时间对象正则...
- 递归lodash.cloneDeep推荐工作中没必要重复造轮子
深度克隆
function deepClone(obj) {
if (typeof obj !== "object" || obj == null) {
return obj;
}
let res = obj instanceof Array ? [] : {};
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
res[key] = deepClone(obj[key]);
}
}
return res;
}
如何使用==和===
==不判断数据类型 ===判断数据类型
只有 obj == null 使用双等
obj == null是下列代码的缩写
if (obj === null || obj === undefined) {}
哪些是truly变量?哪些是falsely变量?
哪些是truly标量
- truly变量 !!val === true
- falsey变量 !!vla === false
除了fasely变量,都是truly变量
- 数字0
- NaN
- 空字符串
- null
- undefined
原型和原型链是怎么回事
原型
每个class都有显示原型prototype每个实例都有隐身原型__proto__实例的__proto__指向对应class的prototype
原型的执行规则
先从自身的属性和方法中查找 如歌找不到,去__proto__中找
原型链
原型链,所有的原型构成了一个链条,这个链条就是原型链
this在不同场景,如何去获取
普通函数this指向
非严格window 严格undefined
call apply bind的this
喜欢的老铁点赞收藏呦