ES6 일반적인 면접 질문

차이의 1.es5 및 ES6, 당신이 알고 무슨 말을 ES6

ECMAScript5, 즉 ES5는 ECMA 스크립트의 다섯 번째 개정, 2009 년에 완성 표준화이다

ECMAScript6 즉 ES6는 또한 ES2015라고도 2015 완료 ECMA 스크립트의 리비전, 인

ES6 ES5는 발전 효율의 향상, 더 간결한 ES5에 대하여 제 개선 후 초이며

ES6의 새로운 기능 중 일부 :

1)하자 변수와 상수는 const를 선언 두 블록 레벨 범위 ES5하지 블록 레벨 범위가, 변수 VAR 리프트,에하자가 선언

변수는 선언해야합니다.

2) 함수 정의 기능 ES6 화살표 키 () 함수에서 사용되지 더이상하고, () => 정의 사용

3) ( ') 식별자는 정상적인 문자열로 사용할 수 있으며,이 스트링의 복수의 열을 정의하는데 사용될 수있다와 템플릿 캐릭터 스트링의 향상된 버전

4) ES6 특정 패턴에 따라 할당 destructuring 허용하고 개체 값의 배열 변수 할당로부터 추출된다.

5)과 루프 용 어레이의 루프를 설정 한 맵 구조를 통과 할 수 있고, 몇몇 배열 형상물, 목적 및 문자열.

6) 가져 오기, 내보내기 수출입 ES6 표준 JS 기본 지원 모듈 (모듈). JS 코드가 상이한 기능 모듈 세트로 나뉘어,

코드 다른 기능은 각 모듈은 일반적인 인터페이스의 일부를 유도하고, 도입의 방법으로 모듈의 다른 곳에서 사용할 수 있으며, 다른 파일로 작성되었습니다.

7) 일련의 데이터 구조, 배열 등을들 수있다. 모든 데이터는 중복 값이 ​​고유하지 않습니다. 그는 자신이 생성자이다.

8) ... 문자 배열 또는 값을 확장 할 수있는 개체를 확장, 또한 변수 값 복수로서 수집 될 수있다.

9) 데코레이터 @decorator는 클래스와 실행도 방법의 동작을 수정하는 데 사용하는 기능은 컴파일시 장식의 성격의 함수이다

10) ES6 클래스의 상속 클래스는 같은 프로토 타입 체인 ES5 구현 상속하지만, 클래스 개념의 도입을 사용하지 좋아해요.

11) 비동기, AWAIT 사용 비동기 / AWAIT, 약속으로 코드를 기록함으로써 비동기 동기화 프로세스를 처리하고 함수를 선언하는 데 사용되는 코드의 단순성 및 가독성을 향상시키기 위해 형성 할 것은 잠시 AWAIT 비동기, 대기 비동기 인 비동기 메소드 실행이 완료된다.

12) 비동기 프로그래밍은 강력한 기존 솔루션 (콜백 기능과 이벤트),보다 합리적인 솔루션입니다 약속드립니다.

13) 기호는 원시 타입이다. 기호는 기호 생성 함수를 호출하여, 그 함수는 심볼이 고유 반환, 옵션 이름 매개 변수를받습니다.

프록시 에이전트가 프록시 (프록시)를 사용하는) 14 작동하면 다음 당신이 어떤 일을 할 수있다, 객체를 수신합니다.

2.var의 차이는, const를 보자

바르 변수 선언 문은 반복 될 수 있고, 문을 반복하지 말자.

VAR 블록 레벨 제한되지 않고, 블록 레벨을 수 있도록 제한됩니다.

VAR 창 (속성을 멈춤)로 매핑되지만, 윈도우와 매핑 허용하지 않습니다.

var 문은 위의 변수에 액세스하고, 죽은 임시 저장을 할 수 있습니다, 액세스 변수는 위의 오류에 선언했다.

CONST이 창 매핑 동일 못하게, 블록 레벨 범위에 대한 지원은, 액세스 변수는 상기 오류 선언.

3.에주의를 지불해야합니까 기능 화살표?

십자 기능 (1),이 점 창 아니지만, 부모 (가리키는 변수).

(2) 인수 객체를 사용할 수 없습니다.

(3) 그렇지 않으면 오류가 발생합니다, 새 명령을 사용할 수없는 생성자로 사용할 수 없습니다.

(4) 명령 수 수율을 사용하고, 따라서 기능을 사용할 수없는 함수 발생기 화살표

새 템플릿 문자열 4.ES6가 무엇입니까? 그리고 클래스 템플릿 문자열의 기능을 실현.

기본 문자열 형식. 문자열 접합 매립 식입니다. $ 정의 {}.

우리는 백 슬래시 ES5 때 () 멀티 라인 문자열이나 바느질의 문자열 행을 할 수 있습니다. ES6 뒤로 따옴표 ( '') 해결 될 수있다.

클래스 템플릿 문자열 기능

이름 = '웹'을 보자;

하자 나이 = 10;

STR을 =하자`안녕하세요, $ {이름} $ {나이} 년 old`있다

STR = str.replace (/ \ $ \ {([^}] *) \} / g, 함수 () {

          리턴 평가 (인자 [1]);

})

CONSOLE.LOG (STR); // 안녕하세요, 웹 이미 10 세

설정, 차이의지도를 소개 5.?

데이터 재구성 설정 시나리오,지도 데이터 저장을위한.

세트:

(1) 부재는 반복 될 수 없다

(2)键值没有键名,类似数组(3)可以遍历,方法有add,delete,has

Map:

(1)本质上是键值对的集合,类似集合

(2)可以遍历,可以跟各种数据格式转换。

6.ECMAScript 6怎么写calss,为何会出现class?

ES6的class可以看做是一个语法糖,他的绝大部分功能ES5都可以做到。新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法。

//定义类

class Point{

     constructor(x,y){

         //构造方法

        this.x=x;//this关键字代表实例对象

        this.y=y;

   }  toString(){

       return '('  +this.x + ',' +this.y +  ')';

    }

}

7.Promise构造函数时同步执行还是异步执行,那么then方法呢?

promise构造函数时同步执行的,then方法是异步执行的

8.setTimeout、Promise、Async/Await的区别?

事件循环中分为宏任务队列和微任务队列

 

其中setTimeout的回调函数放到宏任务队列里,等到执行栈清空以后执行。

 

promise.then里的回调函数会放到相应宏任务的微任务队列里,等宏任务里面的同步代码执行完再执行。

 

async函数表示函数里面可能会有异步方法,await后面跟一个表达式。

 

async方法执行时,遇到await会立即执行表达式,然后把表达式后面的代码放到微任务队列里,让出执行栈让同步代码先执行。

9.promise有几种状态,什么时候会进入catch?

三个状态:pending、fulfilled、reject

两个过程:pedding->fulfilled、pedding->rejected

当pending为rejected时,会进入catch

10.下面的输出结果是多少?

const promise =new Promise((resolve,reject)=>{

     console.log(1);

     resolve();

     console.log(2);

})

 

promise.then(()=>{

    console.log(3);

})

 

console.log(4);

Promise新建后立即执行,所以会先输出1,2而Promise.then()内部的代码在当次事件循环的结尾立刻执行,所以会继续输出4,最后输出3

11.使用结构赋值,实现两个变量的值的交换。

let a=1; let b=2;

[a,b] =[b,a];

12.设计一个对象,键名的类型至少包含一个symbol类型,并且实现遍历所有key

let name=Symbol('name');

let product={

     [name]:"洗衣机",

     "price":799

};

Reflect.ownKeys(product);

13.下面Set结构,打印出来的size值是多少

let s=newSet();

s.add([1]);

s.add([1]);

console.log(s.size);

答案:2

两个数组[1]并不是同一个值,他们分别定义的数组,在内存中分别对应着不同的存储地址,因此并不是相同的值。

都能存储到Set结构中,所以size为2。

14.Promise中reject和catch处理上有什么区别?

reject是用来抛出异常的,catch是用来处理异常。

reject是Promise的方法,而catch是Promise实例的方法。

reject后的东西,一定会进入then中的第二个回调,如果then中没有写第二个回调,则进入catch

网络异常(比如断网),会直接进入catch而不会进入then的第二个回调。

15.使用class手写一个Promise

//创建一个Promise的类

class Promise{

     constructor(executer){//构造函数constructor里面是个执行器

        this.status='pending';//默认的状态 pending

        this.value=undefined  //成功的值默认undefined

        this.reason=undefined //失败的值默认undefined

       //状态只有在pending时候才能改变

         let resolveFn= value  =>{

        //判断只有等待时才能resolve成功

        if(this.status==pending){

           this.status='resolve';

           this.value=value;

       }

    }

try{

     //把resolve和reject两个函数传给执行器executer

       executer(resolve,reject);

 }.catch(e){

      reject(e);//失败的话进catch

    }

}

then(onFufilled.onReject){

   //如果状态成功回调用onFufilled

   if(this.status='resolve'){

     onFufilled(this.value);

  }

 //如果状态失败调用onReject

if(this.status = 'reject' ){

    onReject(this.reason);

 }

 }

}

16.如何使用Set去重

let arr=[12,43,23,43,68,12];

let item=[...new Set(arr)];

console.log(item);//[12,43,23,68]

 

17.将下面for循环改成for of 形式

let arr=[11,22,33,44,55];

let sum=0;

for(let i=0;i<arr.length;i++){

   sum+=arr[i];

}

答案:

let arr=[11,22,33,44,55];

let sum=0;

for(value of arr){

   sum+=value;

}

18.理解async/await以及对Generator的优势

async await是用来解决异步的,async函数是Generator函数的语法糖

 

使用关键字async来表示,在函数内部使用await来表示异步。

 

async函数返回一个Promise对象,可以使用then方法添加回调函数

 

当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句

async较Generator优势:

(1)内置执行器,Generator函数的执行必须依靠执行器,而Aysnc函数自带执行器,调用方式跟普通函数的调用一样。

(2)更好的语义。async和await相较于*和yield更加语义化

(3)更广的适用性。yield命令后面只能是Thunk函数或Promise对象,async函数的await后面可以是Promise也可以是原始类型的值

(4)返回值是Promise,async函数返回的是Promise对象,比Generator函数返回的lterator对象方便,可以直接使用then()方法进行调用。

19.forEach、for in、for of 三者区别

forEach更多的用来遍历数组

for in 一般用来遍历对象或json

for of 数组对象都可以遍历,遍历对象需要通过和Object.keys()

for in 循环出的是key,for of 循环的是value

20.说一下es6的导入导出模块

导入通过import关键字

//导入通过import关键字

import {sum} from "./example.js"

//导入多个

import {sum.multiply.time} from "./exportExample.js"

//导入一整个模块

import * as example from "./exportExample.js"

//导出通过export关键字

//可以将export放在任何变量,函数或类声明的前面

export var firstName ='Michael';

export var lastName='Jackson';

export var year=1958;

//也可以使用大括号指定所要输出的一组变量

var firstName='Michael';

var lastName='Jackson';

var year=1958;

export {firstName,lastName,year};

//使用export default时,对应的import语句不需要使用大括号

let bosh=function crs( ){ }

export default bosh;

import crc from 'crc';

//不使用export default 时,对应的import语句不需要使用大括号

let bosh=function crs( ){  }

export  bosh;

import {crc} from 'crc';

 

추천

출처www.cnblogs.com/sna-ling/p/11986353.html