ES6经典面试题


1.箭头函数有哪些特性

1、箭头函数是匿名函数,不绑定自己的this,arguments,super,new.target

2、箭头函数会捕获其所在上下文的this值,作为自己的this值,在使用call/apply绑定时,相当于只是传入了参数,对this没有影响

3、箭头函数不绑定arguments,取而代之用rest参数…解决

4、箭头函数当方法使用的时候,没有定义this绑定

5、箭头函数不能作为构造函数,和 new 一起用就会抛出错误

6、箭头函数没有原型属性

7、不能简单返回对象字面量

2.实现数组过滤重复

  Let s = [...new Set(arr)]

3.使用json方式实现深拷贝

let arr2 = JSON.parse(JSON.stringify(arr1));

4.ES6模板字符串有哪些好处

 a. 在ES5拼接的时候,如果结构需要换行,必须使用转义符;在ES6中,使用模板字符串,直接使用html结构即可

b. 在ES5中,单引号和双引号必须注意嵌套问题,在ES6中,就不需要考虑;

c. 模板字符串中,可以写js语句

d. 方便简洁,不容易出错;

5.关于对象扩展的属性简写和属性名表达方式写法,请各举一个例子

1. 属性的简写:必须属性名和变量名相同

3. 属性表达式:[]里面可以是变量,字符串,数字,表达式

注意:如果对象的属性是数字,不可以使用点进行访问

属性名简写:

var title = 'offc';

var size = 10;

var obj = {

title,

size,

};

属性名表达式:

var title = 'offc';

obj[title] = '';


6.手写promise

var p = new Promise((resolve,reject)={

if(1){

resolve(‘成功’)

}

else{

reject(‘失败’);

}

})

p.then((res)=>{}).catch((err)=>{})

7.用class定义一个类

class Aniaml{

static Type = ‘动物’

constructor(newName){

this.name = newName

}

eat(){conosle.log(‘吃东西’)}

static sayHi(){

console.log(‘大家好’)

}

}


8.class实现继承

class Tigger extends Animal{

constructor(props){

super(props)

}

}

9.谈一下对async。。。。await的理解

async...await是基于promise的generator语法糖,它用来等待promise的执行结果,常规函数使用await没有效果;async修饰的函数内部return不会得到预期的结果,会得到一个promise对象;await等待的promise结果是resolve状态的内容,reject状态的内容需要使用try...catch获取,await关键字必须要出现在async修饰的函数中,否则报错。

10.ES6中的symbol类型有什么作用

ES6新增了Symbol数据类型,它用来生成一个独一无二的值,它Symbol数据常用来给对象属性赋值,让对象属性具备唯一性,不容易被覆盖。

11.class类中的super有哪些用法

Super在类中有两种用法,一个是super方法,一个是super对象;super方法只能出现在constructor方法中,super对象一般出现在子类覆盖父类的方法中。

12.静态和成员的区别

静态的变量或方法归类所有,全局独一份,成员的变量或方法归对象所有,每次实例化对象成员方法和成员变量就会得到一份拷贝;对于一些通用性的属性或方法,可以考虑设置为静态。


13.谈一体你多promise的理解

Promise用来解决异步回调问题,由于js是单线程的,很多异步操作都是依靠回调方法实现的,这种做法在逻辑比较复杂的回调嵌套中会相当复杂;也叫做回调地狱;promise用来将这种繁杂的做法简化,让程序更具备可读性,可维护性;promise内部有三种状态,pedding,fulfilled,rejected;pedding表示程序正在执行但未得到结果,即异步操作没有执行完毕,fulfilled表示程序执行完毕,且执行成功,rejected表示执行完毕但失败;这里的成功和失败都是逻辑意义上的;并非是要报错。其实,promise和回调函数一样,都是要解决数据的传递和消息发送问题,promise中的then一般对应成功后的数据处理,catch一般对应失败后的数据处理。Promise状态一旦确定,就不会再次发生改变

14.深拷贝的原理

Js的深拷贝发生在对象的赋值上,对象赋值的时候仅仅是一个引用赋值,也就是说两个不同变量名指向的是同一份内存空间;基本数据类型则不存在这样的行为;要完成对象的深拷贝需要使用递归遍历所有对象的属性进行赋值,也可以使用JSON.stringfy和JSON.parse操作。


15.set和map的区别

Set是一种类似数组的集合类型,它与数组不同的是,不允许存在重复数据;常用操作方法有:add,delete,has,clear等;遍历使用forEach;

Map是一种类似对象的集合类型,它与对象不同的是,key可以接受对象类型,常用的操作方法有:set,get,has,delete等;遍历使用forEach

16.node的特点是什么

1)它是一个Javascript运行环境

2)依赖于Chrome V8引擎进行代码解释

3)事件驱动

4)非阻塞I/O

5)轻量、可伸缩,适于实时数据交互应用

6)单进程,单线程


17.module.exports和exports的区别,请用代码示范

Exports和module.exports的区别:

1)exports相当于在js文件的首行写了let exports = module.exports;(但是实际情况不需要写,否则报错)

2)exports不可以直接赋值,如果直接赋值相当于与module.exports切断了联系,没有了导出功能;

3)如果exports和module.exports同时导出,exports就失去了导出的功能;

4)注意点:module.exports只使用一次即可,多个变量输出的时候,可以使用对象的形式

18.MIME类型有什么作用

MIME的全称是Multipurpose Internet Mail Extensions,即多用途互联网邮件扩展类型。这是HTTP协议中用来定义文档性质及格式的标准。服务器通过MIME告知响应内容类型,而浏览器则通过MIME类型来确定如何处理文档。

常见MIME类型:

application/octet-stream?未知的应用程序文件

application/json?json数据

text/plain未知的文本文件(纯文本文件),浏览器会认为这是可以直接显示的

注:?浏览器分辨文件是基于MIME的,而不会把文件打开查看是否是其他类型,例如用link链接了一个标记为text/plain的文件,就算此文件是css文件,就算其后缀是.css,浏览器依旧不认

text/css?css文件

text/html?HTML文件

image/gif?gif文件

常见的还有image/jpeg、image/png、image/svg

很多浏览器支持icon image/x-icon


let和var的区别

1)let是块作用域,var是函数作用域

2)let没有变量声明提升,var有声明提升

3)存在暂时性死区(TDZ),暂时性死区所指的问题基本都是 先声明后使用的问题

4)在let声明变量所在的作用域,不能重复声明同名变量


20.iterator的作用是什么,怎么布置iterator接口。

1、统一数据结构(数组,对象,map,set,数组包对象,对象包数组)的遍历方式

2、在数据结构上部署iterator接口:所谓的部署接口表现形式为,给对象或数组等集合增加iterator属性,属性的内容是一个根据iterator接口规范自行实现的方法

21cookie和session的区别

session是区别于数据库存在的一种服务器临时存储技术, 它主要存储一些无需持久化的数据, 比如临时的登录状态信息等

cookie是存在于浏览器上的一种浏览器本地存储的方式, 同域名下的cookie不同标签页可以共享, 默认过期时间是浏览器关闭时, 而且在进行http请求时, 会自动带上浏览器全部的cookie发给后台, 后台也可以获取cookie, 设置可以在响应时, 想浏览器中设置cookie。

你可能感兴趣的:(ES6经典面试题)