react(js)笔试题,面试题
//待更新。。。
1.请写下JavaScript所有数据类型:
答:1字符串string、2数字number、3布尔boolean、4对象Object(数组array,函数function...)、5Null未定义、6Undefined未负值。(可以用typeof方法打印的类型)
2.undefined 和 null :
答:Undefined 这个值表示变量不含有值。可以通过将变量的值设置为 null 来清空变量。
3.在数组的第一位插入,删除元素:
答:shift(),unshift()
4:在数组的末尾插入删除元素:
答:push(),pop()
5:在数组的中间插入删除元素
答:splice(1,2,'替代'),替代位置不填则仅删除,填写则替代
6:按顺序写下生命周期所在的阶段:
7:什么是高阶组件并书写一个高阶组件:
答:high-order-component(高阶组件)类似于高阶函数,即指接受React组件作为参数(重点),输出一个新的组件的函数,在这个函数中,我们可以修饰组件的props与state,所以在一些特定情况下高阶组件可以让我们的代码看起来更优美,更具有复用性
8:创建一个react组件是什么类型:
答:function类型
9:react组件引入后是什么类型:
答:实例化后为Object类型
10:说说PureComponent:
答:浅比较state与props,使得shouldComponentUpdate自动判断是否重新渲染组件。
注意点是当指向对象一致时,及时对象内部变化也不回渲染。
当需要组件重新渲染时,
let {items} = this.state
items.push('new-item')
this.setState({ items })
//结果不重新渲染
//需要写成
let {items} = this.state
items.push('new-item')
this.setState({ items: [...items] })
11: 0.1 +0.2 !== 0.3 为什么
答:计算机为二进制算法。
0.1的二进制为0.0001100110011001100110011001100110011001100110011001101
0.2的二进制为0.001100110011001100110011001100110011001100110011001101
加起来为:0.010011001100110011001100110011001100110011001100110101化为十进制为0.30000000000000004
不相等
-
类、继承
js里的类 class 是属于函数,对象的模板typeof的结果回是function,
js的私有继承:
来自网络
//class类 extends 继承 Component组件
class WaitContainer extends Component {
/*constructor会覆盖父类的constructor,所以需要传入props绑定,否则无法使用super(name),
super是代替的是父类的构造函数,
super(name)相当于sup.prototype.constructor.call(this, name)
*/
constructor(props) {
super(props)
//super关键字来实现对父类成员Component的访问
}
}
-
闭包:(说法好像很多,我取了我觉得合理的)
例子: 例子
答:闭包 = 函数(外层函数)+函数(返回的函数)+外层函数中的环境变量被返回的函数使用(这个变量不会立刻被内存释放)
这里tmp在foo执行结束后没有被立即释放,有可能造成内存泄漏
- 线程
答:是程序执行流的最小单元,可并发执行。