면접의 ES6

5060 단어 es6
면접 과정에서 symbol이 언급되었는데 비극적이어서 제가 너무 못 맞혔어요. 그래서 저녁에 돌아와서 정리를 하고 못하는 사람을 만나면 바로 구제해야 돼요!
앞으로 ES6에 대해서 저도 정리를 해볼게요.

Symbol


1.symbol은 유일무이하여 명칭 충돌을 피하기 위해 대상의 속성 이름을 사용할 수 있습니다.
이전에 for in이 원형에 널리 퍼질 수 있는 방법과 속성을 언급한 적이 있다.Object.keys(obj)가 되돌아오는 것은 원형의 방법과 속성을 포함하지 않습니다.for-in은 대상의symbol키, Object를 옮겨다니지 않습니다.keys(obj)도 그렇고, 생각해 보니 원형보다 더 까다롭다.
2.symbol은 문자열로 암시적으로 변환할 수 없습니다
        var sym = Symbol("<3");// new, Symbol 
        console.log(sym);//Symbol(<3)
        console.log("Symbol:"+sym);//Uncaught TypeError: Cannot convert a Symbol value to a string

그러나 스트링(sym) 또는 sym은 명시적으로 변환할 수 있습니다.toString()이 문자열로 변환됩니다.

객체 분해 할당 값


1. 대상 해체는 언제 기본값이 작용합니까?
속성 값이 엄격하게undefined와 같을 때 (예를 들어 쓰지 않거나undefined를 직접 부여하는 것)
var { message: msg = "You Are A Person!" } = {};
consle.log(msg); //"You Are A Person!"

var { x = 3 } = { x: undefined };
console.log(x); //3

null이면 undefined가 아니에요.
var { y = 3 } = { y: null };
console.log(y);//null

2. 이미 성명한 변수는 어떻게 할당치를 해석합니까?
가장 간단한 것은 부치를 해체할 때 성명할 수 있다.
var {x:x0,y=2}={x:1};
console.log(x0,y);//1,2

그러면 이미 성명한 변수도 이렇게 사용할 수 있습니까?
var x,y;
{x:xo,y=2}={x:1};//Uncaught SyntaxError: Unexpected token =
console.log(xo,y);

잘못 보고된 것을 발견할 수 있다!여기서 {x:xo, y=2}를 코드 블록으로 이해합니다.미리 설명된 변수입니다. 값을 풀려면 ()
var x,y;
({x:xo,y=2}={x:1});
console.log(xo,y);//1,2

지난번 신선하고 따끈따끈한 문제:
let x, { x: y = 1 } = { x }; y;

A、 undefined
B、 1
C、 { x: 1 }
D、 Error

현혹되지 마십시오. 이것은 이미 성명한 변수가 아닙니다.x를undefined로 정의한 다음에 기본값이 작용합니다. y는 1과 같습니다.

Class


1. 클래스의 유형은 함수이고 클래스가 가리키는 것은 구조 함수이다
위의 두 마디는 각각 아래의 코드로 표시할 수 있다
class Test{

}
console.log(typeof Test);//function
console.log(Test === Test.prototype.constructor);//true

너는 틀림없이 이상할 것이다. 나는 constructor를 쓰지 않았는데, 그것은 어디에서 왔지?
constructor는 기본 방법입니다. new를 사용하여 실례 대상을 정의할 때 constructor를 자동으로 호출하고 필요한 파라미터를 전송합니다. 실행이 끝나면 실례 대상을 되돌려줍니다.constructor가 정의되지 않으면 기본적으로 빈 constructor를 추가합니다.
2. 정의 클래스는 클래스 성명 & 클래스 표현식으로 나뉜다
클래스 선언
class Test{

}

클래스 표현식 (class 뒤에 있는 클래스 이름은 클래스 내부에서만 사용할 수 있고 밖에서 사용하면 오류 보고)
var prepare = class Test{
    constructor(){
        console.log(Test);// Test 
    }
}
new prepare();
new Test()//Test is not defined;

즉시 실행하는 클래스는 클래스 앞에 new를 붙여야 합니다
const p = new class {
    constructor(name,age){
        console.log(name,age);
    }
}("job",30)

3. class 함수 성명 승급 없음
//----- -------
// , , 。
func();
function func(){}

//----- ---------------
new StdInfo();  // ,StdInfo is not defined
class StdInfo{}

4. 하위 클래스에constructor 함수가 있으면 슈퍼 키워드로this를 가져와야 합니다
        class a{
            constructor(cloth,cost){
                this.cloth = cloth,
                this.cost = cost
            }
            tellMe(){
                console.log(this.cloth+" "+this.cost+" ");
            }
        }
        var shirt = new a(" ",15);
        shirt.tellMe();
        class b extends a{
            constructor(cloth,cost,pos){
                super(cloth,cost);// this, this, this
                this.pos = pos;
            }
            tellMe(){
                console.log(this.pos+this.cloth+" "+this.cost+" ");
            }
        }
        var pants = new b(" ",23," ");
        pants.tellMe();

비교적 까다로운 문제를 내자. extends와 결합할 뿐만 아니라 괄호에 대한 단일/여러 표현식은 마지막 표현식의 값만 되돌려준다~
typeof (new (class F extends (String, Array) { })).substring

A、 "function"
B、 "object"
C、 "undefined"
D、 Error

괄호 안의 내용을 표현식으로 보기 (String, Array)/Array, 마지막 값 (class F extends Array) 을 되돌려줍니다.//class F가 Array로 계승됨(new(class F extends Array);//F의 인스턴스를 만듭니다.substring;//예를 들어 String을 계승하지 않았기 때문에 Array에substring 방법이 없으면 반환 값은undefined typeof (new (class F extends (String, Array)) 이다.substring;//undefined에서 typeof 가져오기
5. 사유 속성과 사유 방법을 정의하는 것을 지원하지 않습니다
 

화살표 함수


1.this는 상하문 환경을 영원히 가리키는this
var obj ={
    a: 233,
    b: function(){
        console.log(this,this.a);
    },
    c: function(){
        return ()=>{
            console.log(this,this.a);
        }
    },
    d: ()=>{
        console.log(this,this.a);
    }
}
var a = 666;
obj.b();//obj 233
obj.c()();//obj 233
var obj_b = obj.b;
obj_b();//Window 666
obj.d();//Window 666

obj.c 방법에서return의 화살표는function(){}이 환경의this를 포획하기 때문에obj를 가리킨다.
obj.d 방법의 화살표는 obj {} 이 대상의 환경을 포획하기 때문에 window를 가리킨다.
2. 콜과 apply는 소용없다
obj.d();//Window 666
obj.d.call(obj);//Window 666
obj.d.apply(obj);//Window 666
obj.b();//obj 233
obj.b.call(window);//Window 666

3. 화살표 함수는 Generator 함수로 사용할 수 없고 yield 키워드를 사용할 수 없습니다.

좋은 웹페이지 즐겨찾기