ES6 학습 노트--Symbol

1736 단어

1. 개요


ES5의 객체 등록 정보 이름은 모두 문자열입니다. 이 경우 등록 정보 이름 충돌이 발생하기 쉽습니다.예를 들어 다른 사람이 제공한 대상을 사용했지만 이 대상에 새로운 방법(mixin 모드)을 추가하고 싶다면 새로운 방법의 이름이 기존 방법과 충돌할 수 있다.만약 하나의 메커니즘이 있다면 모든 속성의 이름이 유일무이하게 보장되었으면 좋겠다. 이렇게 하면 근본적으로 속성명의 충돌을 방지할 수 있다. 이것이 바로 ES6가 Symbol을 도입한 이유이다.
ES6는 고유한 값을 나타내는 새로운 원시 데이터 유형 Symbol을 도입했습니다.JavaScript 언어의 일곱 번째 데이터 형식입니다. 첫 번째 6가지는 undefined, null, 부울 값 (Boolean), 문자열 (String), 수치 (Number), 대상 (Object) 입니다.
일반 Symbol 값은 Symbol 함수를 통해 생성됩니다.이제 객체의 속성 이름에는 두 가지 유형이 있을 수 있습니다. 하나는 원래 있던 문자열이고, 다른 하나는 새로 추가된 Symbol 유형입니다.Symbol 유형에 속하는 모든 속성 이름은 고유하므로 다른 속성 이름과 충돌하지 않습니다.
let s = Symbol();

typeof s     // "symbol"
위 코드에서 변수 s는 유일무이한 값이다.typeof 연산자 결과 변수 s가 문자열과 같은 다른 유형이 아닌 Symbol 데이터 유형임을 나타냅니다.
  • 파라미터가 있는 것과 파라미터가 없는 Symbol의 비교
  • 를 쓴다
    //  
    var s1 = Symbol();
    var s2 = Symbol();
    
    s1 === s2 // false
    
    //  
    var s1 = Symbol('foo');
    var s2 = Symbol('foo');
    
    s1 === s2 // false
    
    위의 코드에서 Symbol 함수의 매개 변수는 현재 Symbol 값에 대한 설명일 뿐이므로 같은 매개 변수의 Symbol 함수의 반환 값은 같지 않습니다.

    2. 속성 이름으로 Symbol


    각 Symbol 값은 서로 다르기 때문에 Symbol 값은 식별자로서 대상의 속성 이름에 사용하면 같은 이름의 속성이 나타나지 않는다는 것을 보장할 수 있다.이것은 한 대상이 여러 모듈로 구성된 상황에 매우 유용하다. 어떤 키가 부주의로 고쳐지거나 덮어씌워지지 않도록 방지할 수 있다. 다음은 몇 가지 흔히 볼 수 있는 사용 방법을 적는다.
    var mySymbol = Symbol();
    
    //  
    var a = {};
    a[mySymbol] = 'Hello!';        
    
    //  
    var a = {
      [mySymbol]: 'Hello!'
    };
    
    //  
    var a = {};
    Object.defineProperty(a, mySymbol, { value: 'Hello!' });
    // Object.defineProperty,  Symbol  。
    
    //  
    a[mySymbol] // "Hello!"
    
  • 주의해야 할 것은 Symbol 값이 속성 이름일 때 이 속성은 공개 속성이지 사유 속성이 아니다.
  • 이상은 Symbol에 대한 지식을 간단하게 썼을 뿐입니다. 더 많은 참고 - 완일봉 선생님 문장

    좋은 웹페이지 즐겨찾기