차이의 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';