1. Symbol
- Symbol은 변경 불가능한 원시 타입으로, 고유의 값을 가진다.
- 오브젝트의 유일한 프로퍼티 키를 만들거나, 고유한 상수 값을 만들때 사용
- Symbol은 함수를 호출할 때마다 이름의 충돌이 없는 Symbol 값이 생성된다.
let symbol1 = Symbol();
let symbol2 = Symbol("propname");
// propname이라는 인자는 별도 기능없이 해당 심블에 대한 설명
let obj = {};
obj[symbol1] = "test1" // 오브젝트에 symbol1 값을 프로퍼티로 사용
(심블은 고유값을 생성하기 때문에 충돌 x)
obj[symbol2] = "test2"
2. Symbol.iterator
- 특정 객체가 Symbol.iterator를 프로퍼티 키로 사용한 메소드가 존재하면 자바스크립트
엔진은 이 객체를 이터내셔널 프로토콜을 따르는 것으로 간주하고 이터레이터로 동작
- 이터레이터로 동작하는 객체 : Array, String, Map, Set, Dom data structures, arguments
const iterable = ['a', 'b', 'c'];
const iterator = iterable[Symbol.iterator]();
// 이터러블의 Symbole.iterator를 포로퍼티 key로 사용한 메소드는 이터레이터 반환
const.log(iterator.next()) → { value : 'a', done: false }
const.log(iterator.next()) → { value : 'b', done: false }
const.log(iterator.next()) → { value : 'c', done: false }
const.log(iterator.next()) → { value : undefined, done: true }
3. Symbol.for
- Symbol.for 메소드는 전달받은 인자로 전역 Symbol 레지스트리에서 해당 키와 일치 여부
판단하여 일치하는 키가 있으면 값을 반환, 아니면 키를 등록하고 신규 값을 생성하여 반환
- 하나의 Symbol을 생성하여 여러 모듈이 키를 통해 Symbol 공유 가능
let s = Symbol.for("shared");
let t = Symbol.for("shared");
// s === t true
s.toString() // "Symbol(shared)"
Symbol.keyfor(t) // "shared"
4. 전역 객체
- 전역 객체의 프로퍼티는 전역으로 정의된 식별자이며, 모든 자바스크립트 프로그램에서 사용
- Node에서는 global이라는 식별자로 전역 객체를 참조
- 웹 브라우저에서 Window 객체가 모든 자바스크립트 코드의 전역 객체
- 자바스크립트의 인터프리터를 시작 할때마다(웹 브라우저 새페이지가 로드할 때마다)
전역 프로퍼티 생성
1) undefined, Infinity, NaN → 전역 상수
2) isNaN(), parseInt(), eval() → 전역 함수
3) Date(), RegExp(), String(), Object(), Array() → 생성자 함수
4) Math, JSON → 전역 객체
5. 기본값(불변), 객체 참조(가변)
- 기본값(불변) : undefined, null, boolean, 숫자, 문자열
ex) let s = "hello"; → 소문자 텍스트 시작
s.ToUpperCase(); → "HELLO"를 반환하지만 s의 값은 변하지 않음
- 객체(가변) : 객체에 저장된 값은 각 프로퍼티가 저장된 메모리의 주소값을
가지고 있기때문에 객체 내 프로퍼티의 값이 변경된다고 해서
새로운 객체가 생성되지 않음
ex ) let obj1 = { a:1, b:2};
let obj2 = obj1
obj2.a = 5
console.log(obj1.a) → 5 : obj1의 주소값을 obj2에 저장되기 때문에
둘다 같은 객체라고 할 수 있음
obj2의 프로퍼티의 값을 변경하면 obj1도 바뀜
'Javascript > Js' 카테고리의 다른 글
JS 타입, 변수 | 변수 선언과 할당 (0) | 2022.05.22 |
---|---|
JS 타입, 변수 | 타입 변환 (0) | 2022.05.21 |
JS 타입, 변수 | 템플릿, 패턴매칭, boolean (0) | 2022.05.20 |
JS 타입, 변수 | 문자열 (0) | 2022.05.15 |
JS 타입, 변수 | 숫자 (0) | 2022.05.14 |