1.什么是事件委托?为什么这样做?
答:它还有一个名字叫事件代理,事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。
为什么这样做呢?通过事件委托可以减少事件处理程序数量,这样就能大大的减少与dom的交互次数,提高性能;
2.js的数据类型?
答:JS的数据类型有8种。
在ES5的时候,我们认知的数据类型确实是 6种:Number、String、Boolean、undefined、object、Null。
ES6 中新增了一种 Symbol 。这种类型的对象永不相等,即始创建的时候传入相同的值,可以解决属性名冲突的问题,做为标记。
谷歌67版本中还出现了一种 bigInt。是指安全存储、操作大整数。(但是很多人不把这个做为一个类型)。
JS数据类型:Object 中包含了哪几种类型?其中包含了Date、function、Array等(这三种比较常用)。
3.for in、Object.keys()区别?哪个要用于遍历原型链上的属性?
答:for-in 是javaScript中最常见的迭代语句,常常用来枚举对象的属性。某些情况下,可能按照随机顺序遍历数组元素;而Object.keys(),可以返回以对象的属性为元素的数组。数组中属性名的顺序跟使用 for-in遍历返回的顺序是一样的。
二者遍历的数量是不同的,for-in 不单可以枚举自身属性,也可以枚举继承自原型链上的属性,Object.keys()只可以枚举自身属性。
for-in会遍历原型链上的属性,而Object.keys不会。
4.NaN == NaN 的结果是什么?为什么?
答:NaN == NaN 的执行结果是 false。因为JavaScript规定,NaN表示的是非数字,但是这个非数字也是不同的,因此 NaN 不等于 NaN,两个NaN永远不可能相等。
5.说一下你对Promise的了解?说说你对Promise的原理的理解?
答:Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。
所谓promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。
(1).Promise.all(),一个失败后,其他的还返回吗?
答:不会返回,promise.all()失败的时候只返回最先被reject失败状态的那个实例对象的值
(2).Promise.all()、Promise.race()区别?
答:两者都是可以同时调用多个promise实现,Promise.all可以将多个实例组装成一个新的实 例,成功的时候返回一个成功数组,失败的时候则返回最先被reject失败状态的值;其中有一个 实例不成功则返回reject;race()是赛跑的意思,也就是说Promise.race([p1, p2, p3])里面的结果哪 个获取的快,就返回哪个结果,不管结果本身是成功还是失败
(3).Promise有哪些状态。
答:有三个状态:pending : 等待 fullfilled(resolved) :成功 reject: 失败
6.Async&await和promise有什么区别?
答:(1)函数前面多了一个async关键字。await关键字只能用在async定义的函数内。async函数会引式返回一个promise
(2)简洁:使用async和await明显节约了不少代码,不需要.then,不需要写匿名函数处理promise的resolve的值,不需要定义多余的data变量,还避免了嵌套代码。
(3)async/await让try/catch 可以同时处理同步和异步错误。try/catch不能处理JSON.parse的错误,因为他在promise中。此时需要.catch,这样的错误处理代码非常冗余。并且,在我们的实际生产代码会更加复杂
(4)async/await能够使得代码调试更简单
7.简单介绍原型链?
答:所有对象都有自己的原型对象(prototype)。一方面,任何一个对象,都可以充当其他对象的原型;另一方面,由于原型对象也是对象,所以它也有自己的原型。因此,就会形成一个“原型链”(prototype chain)最终都可以上溯到Object.prototype Object.prototype对象有没有它的原型呢?回答Object.prototype的原型是null。null没有任何属性和方法,也没有自己的原型。因此,原型链的尽头就是null。
8.如果后端有3个请求,如何保证顺序
答:可以使用Promise链式调用,按顺序执行;也可以使用async函数和关键字await顺序执行
9.es6的set ,map介绍?
答:set和map都是es6新增的数据结构。其中set是一个类数组结构,值是唯一的,没有重复的值。map类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,Map 比 Object 更合适。
10.class与function定义类的区别?
答:
- 关于构造器constructor:在function定义的构造函数中,其prototype.constructor属性指向构造器自身,在class定义的类中,constructor其实也相当于定义在prototype属性上
- 重复定义:function会覆盖之前定义的方法;class会报错
- 原型或者类中方法的枚举:class中所有方法不可枚举
- class没有变量提升,function有
- class定义的类没有私有方法和私有属性