[JavaScript ES6] Symbol

Sooooooah·2023년 4월 25일

javaScript ES6

목록 보기
2/8

ES6에서 새롭게 도입된 원시형 타입.
객체의 속성으로 사용한다.

유일무이한 값, 변경 불가능한 값

let arr =[1,2,3,4,5];
alert(arr.length) // 5 
arr.length = 50; // arr배열에 length 속성을 정의하고 50을 할당
alert(arr.length) // 50 —> 덮어씌워짐


let test = [1, 2, 3, 4, 5];
const a = Symbol("length");
test[a] = 50;

console.log(test.length); // 5
console.log(test[a]); // 50

객체에 속성을 추가하거나 덮어써질 우려가 있다면?
충돌을 피하기 위한 수단으로 심볼(Symbol)을 사용할 수 있다.

생성

심볼은 new 연산자를 사용하지 않는다.

let symbol = Symbol();

괄호 안은 비워두거나 문자열을 넣어서 생성해도 된다.

이때의 문자열은 단순 디버깅 용도이거나 단순 설명일 뿐, 고유한 값을 가지는데 있어서 어떤 영향을 끼치거나 하지는 않는다.

description 인자는 심볼의 고유값을 구분하지 못한다. —> 심볼함수 호출시 매번 새로운 심볼 값을 생성해내기 때문

let symbol2 = Symbol('person');
let symbol3 = Symbol('person');

alert(symbol2 === symbol3); // false

심볼의 출력 형태

심볼 값은 문자열 형태로 변환할 수 없다.

let symbol = Symbol('age');
console.log(symbol); // Symbol(age)

for ..in 구문으로 반복시 출력되지 않는다. (은닉성을 갖고 있다)

let arr= [1,2,3,4,50];
arr.somProperty = 10;

for(let i in arr){
	console.log(i); // 0,1,2,3,4,someProperty
}

//---------------------------

let arrSymbol = [1,2,3,4,5];
let someProperty = Symbol('someProperty');
arrSymbol[someProperty] = 10;

for(let i in arrSymbol){
	console.log(i); // 0,1,2,3,4
}

언제 심볼을 사용할까

배열 객체에 어떤 속성을 넣고자 한다면, 동시에 반복문에서 속성이 나타나지 않게 하고자 한다면 (=== 속성을 은닉화 하고자 할 때)

profile
즐거운 서비스를 추구합니다.

0개의 댓글