ES6 특성: Symbol 유형

1799 단어 ES6수필.
ES5에는 6가지 데이터 형식이 있는데 그것이 바로undefined,null,Boolean,String,Number,Object이다.ES6에는 고유한 값을 나타내는 새로운 원시 데이터 유형인 Symbol이 도입되었습니다.
ES5의 객체 등록 정보 이름은 모두 문자열이므로 등록 정보 이름 충돌이 발생하기 쉽습니다.만약 다른 사람이 제공한 대상을 사용한다면, 지금 이 대상에 새로운 방법을 추가하고 싶다면, 새로운 방법의 이름은 기존 방법과 충돌할 수 있다.만약에 하나의 메커니즘이 있다면 모든 속성의 이름이 유일무이하다는 것을 확보하면 근본적으로 속성명의 충돌을 방지할 수 있다.ES6가 Symbol을 도입한 이유이기도 하다.
창설
Symbol 값은 Symbol 함수를 통해 생성됩니다.즉, 객체의 속성 이름에는 두 가지 유형이 있을 수 있습니다. 하나는 원래 문자열이고, 다른 하나는 새로 추가된 Symbol 유형입니다.속성 이름이 Symbol 유형이면 고유하므로 다른 속성 이름과 충돌하지 않음
let name=Symbol();
typeof name    // "symbol"

참고: Symbol 함수 앞에는 new 명령을 사용할 수 없습니다. 그렇지 않으면 오류가 발생합니다.생성된 Symbol은 객체가 아닌 원래 유형의 값이기 때문입니다.
let name=new Symbol();    // Uncaught TypeError: Symbol is not a constructor

Symbol 함수는 문자열을 매개 변수로 받아들일 수 있으며, 새로 만든 Symbol에 대한 설명을 제공하여 컨트롤러나 문자열로 표시할 때 사용할 수 있으며, 구별하기 편리하다.
let s=Symbol('str');
s    // Symbol(str)
s.toString()    // "Symbol(str)"

사용
각 Symbol의 값은 서로 다르기 때문에 Symbol은 객체의 속성 이름으로서 속성이 이름이 겹치지 않도록 보장합니다.
let s=Symbol("key1");

//  
let o={};
o[s]="aa";
console.log(o);    // {Symbol(key1):"aa"}

//  
let o={
    [s]:"aa"
};
console.log(o);    // {Symbol(key1):"aa"}

//  
let o={};
Object.defineProperty(o,s,{value:"aa"});
console.log(o);    // {Symbol(key1):"aa"}

Symbol은 객체 속성 이름으로 사용할 수 없습니다.연산자, 왜냐하면.연산자 뒤에 문자열이 있으므로 Symbol 값이 아닌 문자열을 가져옵니다.마찬가지로 객체 내부에서 Symbol 값을 사용하여 속성을 정의할 때 Symbol 값은 대괄호 []에 있어야 합니다.
let o={};
let k=Symbol('key1');
o[k]="aa";
console.log(o[k]);    // aa
console.log(o.k);    // undefined

let s = Symbol();
let obj = {
  [s]: function (arg) { ... }
};

좋은 웹페이지 즐겨찾기