ES6 Start Symbol

4908 단어
ES5 객체 속성 이름은 문자열로 인해 속성 이름이 충돌하기 쉽습니다.
eg:var a = { name: 'lucy'};

a.name = 'lili';

ES6는 고유한 값을 나타내는 새로운 원시 데이터 유형 Symbol을 도입했습니다.
새로운 지식을 다시 복습해 봅시다: 기본 데이터 형식은 6가지가 있는데 그것이 바로 Undefined, Null, 부울 값(Boolean), 문자열(String), 수치(Number), 대상(Object)입니다.
SymbolSymbol 함수 전에는 new 명령을 사용할 수 없습니다. 그렇지 않으면 오류가 발생합니다.이는 생성된 Symbol이 객체가 아닌 원래 유형의 값이기 때문입니다.Symbol 함수는 하나의 문자열을 매개 변수로 받아들여 Symbol의 실례에 대한 설명을 나타낼 수 있는데 주로 컨트롤러에 표시하거나 문자열로 전환할 때 비교적 쉽게 구분하기 위한 것이다.
//  
var s1 = Symbol();
var s2 = Symbol();

s1 === s2 // false

//  
var s1 = Symbol("foo");
var s2 = Symbol("foo");

s1 === s2 // false

Symbol 값은 다른 유형의 값과 연산할 수 없습니다.

속성 이름으로 Symbol

var mySymbol = Symbol();

//  
var a = {};
a[mySymbol] = 'Hello!';

//  
var a = {
  [mySymbol]: 'Hello!'
};

//  
var a = {};
Object.defineProperty(a, mySymbol, { value: 'Hello!' });

//  
a[mySymbol] // "Hello!"

Symbol 값을 객체 속성 이름으로 사용할 때는 점 연산자를 사용할 수 없습니다.
var a = {};
var name = Symbol();
a.name = 'lili';
a[name] = 'lucy';
console.log(a.name,a[name]);             //lili,lucy

Symbol 값이 등록 정보 이름으로 지정될 때 등록 정보는 비공개 등록 정보가 아닙니다.
이것은 자바의 보호된 속성과 약간 유사합니다. (보호된 속성과private의 차이: 클래스의 외부에서는 접근할 수 없고, 클래스 내의 하위 클래스는 보호된 속성을 계승할 수 있으며 보호된 속성은private를 계승할 수 없습니다.)
그러나 이곳의 Symbol은 클래스 외부에서도 접근할 수 있다. 단지 for...in, for...of 순환에 나타나지 않고 Object.keys(), Object.getOwnPropertyNames()에 되돌아오지 않는다.그러나 지정된 객체의 모든 Symbol 속성 이름을 가져오는 Object.getOwnPropertySymbols 방법이 있습니다.

Symbol.for(),Symbol.keyFor()


Symbol.for 메커니즘은 단일 모드와 유사합니다. 우선 전역에서 이 인자를 이름으로 하는 Symbol 값이 있는지 검색하고, 있으면 이 Symbol 값을 되돌려줍니다. 그렇지 않으면 이 문자열을 이름으로 하는 Symbol 값을 새로 만들고 되돌려줍니다.직접적인 Symbol과는 다른 점이 있습니다.
var s1 = Symbol.for('foo');
var s2 = Symbol.for('foo');

s1 === s2 // true

Symbol.keyFor 메서드는 등록된 Symbol 유형 값의 키를 반환합니다.실질적으로 Symbol 이 생성되었는지 확인합니다.
var s1 = Symbol.for("foo");
Symbol.keyFor(s1) // "foo"

var s2 = Symbol("foo");
Symbol.keyFor(s2) // undefined

내장된 Symbol 값


11가지 방법이 있는데 구체적으로 볼 수 있다http://es6.ruanyifeng.com/#docs/symbol
 
전재 대상:https://www.cnblogs.com/sker/p/5474591.html

좋은 웹페이지 즐겨찾기