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) { ... }
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
(Javascript) ES6의 주요 특징 정리let을 사용하면 선언한 변수는 블록안에서만 유효하게 된다. const 역시 마찬가지로 블록스코프를 따른다 .const 와 let의 차이점은 const 는 상수로 값을 할당한다는 점이다. 따라서 값을 변경시키려고 하...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.