지적 코딩을 위한 매우 얕은 지식

Javascript/Js

JS 타입, 변수 | Symbol, 전역 객체, 객체 참조

toy2508 2022. 5. 21. 16:52
반응형

 

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도 바뀜

 

   https://velog.io/@modolee/core-javascript-01                      

반응형