ES6面试题总结

1. 谈谈你对 ES6 的理解,为什么要学习es6?

 ES6是新一代的JS语言标准,对分JS语言核心内容做了升级优化,规范了JS使用标准,新增了JS原生方法,使得JS使用更加规范,更加优雅,更适合大型应用的开发。学习ES6是成为专业前端正规军的必经之路。

2. ES和js有什么关系?

 ES是JS的一种规格,JS是ES的实现

3. 解构赋值及其原理?

解构是ES6提供的语法糖,其实内在是针对可迭代对象的Iterator接口,通过遍历器按顺序获取对应的值进行赋值。这里需要提前懂得ES6的两个概念: - Iterator - 可迭代对象

4.var let const 的区别和使用场景?

1:var
  1,var定义的变量会预解析,简单的说就是如果变量没有定义就直接使用的话,JavaScript回去解析这个变量,代码不会报错,只会输出undefined
  2,var定义的变量可以反复去定义,当然后面的会覆盖前面的
  3,var在循环中使用的时候,循环体外依然可以使用
  4,在循环绑定事件过程中,var定义的变量无法保存,循环会在瞬间执行完
2:let
  1,let定义的变量不会预解析,必须先声明再使用,否则会报错
  2,let不能定义已经定义过的变量(无论之前是用var定义的还是let或者const定义的)
  3,let是块级作用域,函数内部使用let定义后,对函数外部无影响,简单说就是在一个{}里面生效
  4,由于let是块级作用域,在循环绑定事件过程中let会在这个循环中生效,再次循环时let会重新定义生效
3:const
	1,const定义的变量不会预解析,必须先声明再使用,否则会报错
	2,const定义的变量不允许修改

5. 什么是模板字符串?

1.ES6(ES2015)为 JavaScript 引入了许多新特性,其中与字符串处理相关的一个新特性——模板字面量,提供了多行字符串、字符串模板的功能,相信很多人已经在使用了。模板字面量的基本使用很简单,但大多数开发者还是仅仅把它当成字符串拼接的语法糖来使用的,实际上它的能力比这要强大得多哦。夸张一点地说,这可能是 ES6 这么多特性中,最容易被低估的特性了。
2.模板字面量在 ES2015 规范中叫做 Template Literals,在规范文档更早的版本中叫Template Strings,所以我们见过的中文文档很多也有把它写成 模板字符串 的,有时为表述方便也非正式地简称为 ES6 模板
3.在 ES6 之前的 JavaScript,字符串作为基本类型,其在代码中的表示方法只有将字符串用引号符(单引号 ' 或 双引号 ")包裹起来,ES6 模板字面量(下文简称 ES6 模板)则使用反撇号符(`)包裹作为字符串表示法。两个反撇号之间的常规字符串保持原样,如:
`hello world` === "hello world" // --> true
`hello "world"` === 'hello "world"' // --> true
`hello 'world'` === "hello 'world'" // --> true
`\`` // --> "`" // --> true

6. 箭头函数和普通函数有什么区别

//箭头函数
let fun = () => {
    console.log('lalalala');
}
//普通函数
function fun() {
    console.log('lalla');
}
	箭头函数相当于匿名函数,并且简化了函数定义。箭头函数有两种格式,一种只包含一个表达式,连{ ... }return都省略掉了。还有一种可以包含多条语句,这时候就不能省略{ ... }return1.箭头函数是匿名函数,不能作为构造函数,不能使用new
	2.箭头函数不绑定arguments,取而代之用rest参数...解决
	3.箭头函数不绑定this,会捕获其所在的上下文的this值,作为自己的this4.箭头函数通过 call()apply() 方法调用一个函数时,只传入了一个参数,对 this 并没有影响。
	5.箭头函数没有原型属性
	6.箭头函数不能当做Generator函数,不能使用yield关键字

7. 什么是扩展运算符?有什么使用场景?

1.扩展运算符(spread)是三个点(…)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。
应用场景:
	1.数组传参
	2.复制数组
	3.合并数组
	4.解构赋值
	5.字符串转数组
	6.类数组转真数组

8. 什么是symbol?

类似于一种标识唯一性的ID,独一无二。

9. Set和Map有什么相同和不同之处?

1.Set接口
	 1.不允许重复对象
	 2. 无序容器,你无法保证每个元素的存储顺序,TreeSet通过 Comparator  或者 Comparable 维护了一个排序顺序。
     3. 只允许一个 null 元素
     4.Set 接口最流行的几个实现类是 HashSet、LinkedHashSet 以及 TreeSet。最流行的是基于 HashMap 实现的 HashSet;TreeSet 还实现了 SortedSet 接口,因此 TreeSet 是一个根据其 compare() 和 compareTo() 的定义进行排序的有序容器。
2.Map接口
	1.Map不是collection的子接口或者实现类。Map是一个接口。
    2.Map 的 每个 Entry 都持有两个对象,也就是一个键一个值,Map 可能会持有相同的值对象但键对象必须是唯一的。
    3. TreeMap 也通过 Comparator  或者 Comparable 维护了一个排序顺序。
    4. Map 里你可以拥有随意个 null 值但最多只能有一个 null 键。
    5.Map 接口最流行的几个实现类是 HashMap、LinkedHashMap、Hashtable 和 TreeMap。(HashMap、TreeMap最常用)

10. 如何声明一个类?类如何继承?

class Cat extends Animal(){
     constructor(){
          super();//super关键字,用来指定父类的实例对象
          this.type = 'cat';
     }
}          
let cat  = new Cat();
cat.says('hello');//输出‘cat says hello’

11. 模块化有什么好处?

第一, 把一个系统分解成各个不同的子模块,不同的开发者专注于对其中某一模块的开发,一方面实现了劳 动的分工,另一方面也提高了自由软件开发的效率。基于模块化的性质,每个模块在开发出来以后都可以通过一个被称作是内核的原系统进行信息交流,发挥整个模块的功能,同时也并不会影响其他模块功能的发挥。而且在各个不同的模块整合在一起后,由于外部性的存在,会使整个系统增加的功能要超过该模块本身的功能。在此过程中实现了价值的分割与整合。
第二, 对于开发者而言,基于模块化的自由软件开发具有更大的吸引力,其在参与开发过程中可以得到更高的期望收益。
第三, 在非模块化的软件开发过程中,存在着严重的“搭便车”现象,当一个开发者选择参与开发,其余的开发者就会选择“搭便车”,最终会导致软件的供给不足;在基于模块化的开发过程中,所有的开发者都更倾向于参与开发不同的模块,从而实现整个系统的开发。

12.js由那三部分组成?

1、ECMAScript(JavaScript语法 )
2、DOM 页面文档对象模型
3、BOM 浏览器对象模型

13. 什么是Proxy?

代理模式:在不改变类的同时扩展类,在代理类中调用被代理者的方法,增加代理自己的方法,将代理类提供给外界调用,达到扩展的效果

14. 什么是Promise?

ES6中一个非常重要和好用的特性就是Promise,Promise是异步编程的一种解决方案(简单来说就是对异步的代码进行包装)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值