前端面试题目2

1.Symbol

ES6引入的一种新的原始数据类型,其特点是表示第一无二的值,Symbol最大的用途是定义对象的唯一属性名。比如要给一个已有属性添加一个新的属性,新的属性可能与旧的属性名冲突,这个时候采用Symbol是最好的。

需要注意的是Symbol不是一个构造函数,所以不能用new关键字;

Symbol函数的参数只是对当前Symbol值的描述,因此相同参数的Symbol函数的返回值是不相等的;

Symbol值不是对象,所以不能添加属性;

Symbol值不能与其他类型的值做运算;

在对象的内部,使用Symbol值定义属性时,Symbol值必须放在方括号中;Symbol值作为对象属性名时,不能用点运算符。

用Symbol值定义的对象属性用普通方法遍历不到,需要用Object.getOwnPropertySymbols()

2.数组去重

方法1:利用for循环和indexOf找下标的方法去重

思路:先定义一个空数组,然后用for循环遍历原数组中的每一个元素,通过indexOf方法判断当前元素在不在新数组中,如果不存在,就用push方法添加。

方法2:ES6 Set方法去重,然后用扩展运算符...或者Array.from返回

方法3:Object键值对去重;将已经出现过的元素当做属性名,存入一个object内

先定义一个空数组和一个空对象,遍历元素中的每一个元素,判断obj中的arr[i]属性有没有值,没有的话,把这个元素添加到新数组,把属性放入object中并赋值,最后返回新数组。这种方法占用内存很多,牺牲了大量空间。

如何理解前端模块化?

前端的模块化就是将复杂的文件编程一个一个独立的模块,比如JS文件,分成独立的模块有利于重用和维护,但是这样会有模块之间相互依赖的问题,所以就有了commonJS规范,AMD/CMD规范,还有ES6模块化规范,以及用于js打包的工具webpack.

什么是回调地狱?如何解决回调地狱问题?

多层回调函数的相互嵌套,就形成了回调地狱。它使代码难以维护,可读性变差。

为了解决回调地狱的问题,ES6提出了Promise的概念。Promise是一个构造函数,它可以创建一个Promises实例对象。它的原型上包含一个.then()的方法,.then()方法可以预先指定成功和失败的回调函数。如果上一个.then()方法返回一个新的Promise实例对象,则可以通过下一个.then()继续处理,就解决了回调地狱的问题。(Promise异步编程的解决方案)

.then()链式调用的的缺点:代码冗余,阅读性差,不易理解。

Promise和async/await的关系:都是异步编程的解决方案,async/await简化了Promise的异步操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值