-
② == 和 ===(第一时间忘记了,仅记得 null
,undefined
在 ==
中相等,而在 ===
中不相等)
- 其实区别就在于
==
在比较的时候会隐式的进行数据类型的转换,再去比较它们,而 ===
则不会,但null和undefined是规定的
'1' == 1
'1' === 1
- 扩展一下,switch(ch)的ch比较与
==
一样
-
③ +
和 -
的使用(优先转Number类型,引用则调用valueOf >> toString)
1 + '1' = '11'
1 - '1' = 0
[] + 1 = 1
-
④ var,let,const的区别
变量提升
,但let,const由于TDZ因此不能在声明语句前去使用它- let,
const
(声明时候必须赋予初始值,后续不允许重新赋值)新增块级作用域
,且存在 TDZ
,变量 不可重复声明
-
⑤ 继承(此处我仅答了基于原型链的继承)
- 因为JS中的继承都是通过原型链来实现的,哪怕是class也仅是一个语法糖
function Person(bname,age) {
this.bname = bname;
this.age = age;
}
Person.prototype.className = 'Person';
function People(bname,age) {
Person.call(this,bname,age);
this.className = 'People';
}
let f = Object.create(Person);
Person.prototype.constructor = People;
People.prototype = f;
let people = new People('moon',21);
class Person {
constructor(bname,age) {
this.bname = bname;
this.age = age;
}
}
Person.prototype.className = 'Person';
class People extends Person {
constructor(bname,age) {
super(bname,age);
this.className = 'People';
}
}
let people = new People('moon',21);
console.log(people);
-
⑥ this指向问题(对箭头函数认识不够清晰,当时答了1,1)
- 首先都是通过对象调用方法,显然this应该在形成函数上下文时赋值为obj,但要注意
箭头函数
没有函数上下文的,它的 this
使用的是 当前的栈顶上下文
(即全局上下文)
var a = 0;
var obj = {
a: 1,
f1: () => {
console.log(this.a);
},
f2: function () {
console.log(this.a);
}
}
obj.f1();
obj.f2();
-
⑦ call和apply
- 均是改变this指向,区别在于后者传入的是数组形式
-
⑧ React的生命周期(此处我说了React15和React16的不同构架)
-
⑨ React.Component 和 React.PureComponent的区别
- 这个其实就是在
类组件
中的 shouldComponentUpdate
添加传入的state或prop比较,防止前后没有变化但更新组件 - 而在
函数式组件
中则对应了 useCallback或useMemo 搭配memo 的使用
shouldComponentUpdate(nextProp,nextState) {
return this.prop !== nextProp || this.state !== nextState;
}
-
⑩ 浅克隆和深克隆
Object.assign()
...运算符
JSON.parse()和JSON.stringify()
- 深克隆的实现方式(像JSON方法实现的克隆就存在
特殊类型无法拷贝
,箭头函数和非箭头函数,map,regexp,symbol为key等)
- 之前对照神三元的实现了一遍,有兴趣的还是去看它的吧
-
END,反问:你怎么评价我呢(下次要换成对我学习上有什么建议才行,不然太明显了)