constructor
constructor中定义的属性可以称为实例属性(即定义在this对象上),constructor外声明的属性都是定义在原型上的,可以称为原型属性(即定义在class上)。hasOwnProperty()函数用于判断属性是否是实例属性。其结果是一个布尔值, true说明是实例属性,false说明不是实例属性。in操作符会在通过对象能够访问给定属性时返回true,无论该属性存在于实例中还是原型中。
数组去重问题
[...new Set(arr)] 用Set去重
一个页面从输入URL到页面加载显示完成,这个过程都发生了什么
一、浏览器根据请求的url 交给DNS域名解析,找到真实的ip,向服务器请求
二、服务器交给后台返回数据
三、浏览器对加载到的资源(html css js )进行语法的解析
四、载入解析到的资源文件,渲染页面 完成
如果一次性插入几万个Dom 如何实现页面不卡顿
一、不可能一次性插入几万个dom 用户眼睛也看不完
解决方案 虚拟滚动(只渲染可视化的区域 用户没有看到的不渲染)
React 在实战中遇到的问题
写一个深拷贝,考虑 正则,Date这种类型的数据
青铜段位
一般的情况 JSON.parse(JSON.stringify(data))就能满足需求,但是有一些数据,比如对象里面的值是Date类型,还有值循环引用,一些Error就不能满足需求了
白银段位

传入需要深拷贝的对象,判断是否是引用数据类型如果不是,返回自己,创建一个新对象,遍历它的属性,判断是否是自己的属性(hasOwnProperty ),然后递归调用自己, 最后返回结果
黄金段位

以上代码中,只是额外增加对参数target是否是数组的判断。执行Object.prototype.toString.call(target) === "[object Array]"判断target是不是数组,若是数组,变量result为[],若不是数组,变量result为{}。
在这里可以向面试官展示你的两个编程能力。
正确理解引用类型概念的能力。
精确判断数据类型的能力。
铂金段位


以上代码中利用额外的变量map来存储当前对象和拷贝对象的对应关系,当需要拷贝当前对象时,先去map中找,有没有拷贝过这个对象,如果有的话直接返回,如果没有的话继续拷贝,这样就巧妙化解的循环引用的问题。最后需要把变量map置为null,释放内存,防止内存泄露。
在这里可以向面试官展示你的两个编程能力。
对循环引用的理解,如何解决循环引用引起的问题的能力。
对内存泄露的认识和避免泄露的能力。
手写防抖和节流
防抖
所谓的防抖就是触发高频事件n秒内函数只执行一次,比如玩游戏的回城,在回城过程中如果重新按了回城建,回城时间便重新计算。比如在应用中存在一个搜索框,用户输入关键字,回渲染搜索结果列表,如果一次输入都像服务器请求数据这样做的效率是比较差的,可以在输入关键字停顿一段时间后,在向服务器请求数据

节流
节流的意思是让函数有节制地执行,而不是毫无节制的触发一次就执行一次。什么叫有节制呢?就是在一段时间内,只执行一次

React组件的生命周期

在react的componentWillReceiveProps(nextProps)生命周期中,可以在子组件的render函数执行前,通过this.props获取旧的属性,通过nextProps获取新的props,对比两次props是否相同,从而更新子组件自己的state。
脚手架的好处
用来快速帮助程序员创建一个基于XXX(react)库的模板项目
1.包含了所有需要的配置
2.指定好了所有的依赖
3.可以直接安装/编译/运行一个简单效果
作用:让代码更趋向于模块化,组件化,工程化

高阶组件
参数为组件,返回一个心的组件,我们常用的组件就是把props转化成UI,而高阶组件就是把一个组件转化成新的组件,让这个新的组件具有更多的功能 比如里面的路由 如用withRouter可以把props添加给navbar 这样navbar就可以拿到里面的一些数据
WeakSet 与 Set 的区别:
WeakSet 只能储存对象引用,不能存放值,而 Set 对象都可以
WeakSet 对象中储存的对象值都是被弱引用的,即垃圾回收机制不考虑 WeakSet 对该对象的应用,如果没有其他的变量或属性引用这个对象值,则这个对象将会被垃圾回收掉(不考虑该对象还存在于 WeakSet 中),所以,WeakSet 对象里有多少个成员元素,取决于垃圾回收机制有没有运行,运行前后成员个数可能不一致,遍历结束之后,有的成员可能取不到了(被垃圾回收了),WeakSet 对象是无法被遍历的(ES6 规定 WeakSet 不可遍历),也没有办法拿到它包含的所有元素
Set
成员唯一、无序且不重复
[value, value],键值与键名是一致的(或者说只有键值,没有键名)
可以遍历,方法有:add、delete、has
WeakSet
成员都是对象
成员都是弱引用,可以被垃圾回收机制回收,可以用来保存DOM节点,不容易造成内存泄漏
不能遍历,方法有add、delete、has
Map
本质上是键值对的集合,类似集合
可以遍历,方法很多可以跟各种数据格式转换
WeakMap
只接受对象作为键名(null除外),不接受其他类型的值作为键名
键名是弱引用,键值可以是任意的,键名所指向的对象可以被垃圾回收,此时键名是无效的
不能遍历,方法有get、set、has、delete
null 和undefined的区别
null表示没有对象,即该处不应该有值
undefined表示缺少值,即此处应该有值,但没有定义
null 默认转成 0
undefined 默认转成 NaN
网友评论