Symbol
심볼(Symbol)이란 변경이 불가능한 데이터로, 유일한 식별자를 만들어 데이터를 보호하는 용도로 사용할 수 있습니다.
Symbol('설명')
심볼은 Symbol 함수에 어떠한 설명을 추가해서 데이터를 만들어낼 수 있으며, 이때 사용되는 설명은 심볼 값과는 관계없는 단순 디버깅을 위한 용도로 사용됩니다.
const sKey = Symbol("hello");
const user = {
key: "일반 정보!",
[sKey]: "민감한 정보!",
};
console.log(user.key); // 일반 정보! 출력
console.log(user["key"]); // 일반 정보! 출력
console.log(user[sKey]); // 민감한 정보! 출력
console.log(user[Symbol("hello")]); // undefined 출력
우선 Symbol 함수에 hello라는 설명을 추가해 주었으며, 앞서 언급한 대로 설명은 심볼값과는 관계없는 단순히 디버깅을 위한 용도로 사용됩니다. 생성한 Symbol 데이터를 이용하여 user라는 객체를 생성해주었고 생성한 user 객체를 콘솔로 출력을 해보았습니다.
세 번째 콘솔에서 대괄호 표기법을 사용하여 객체 user에서 찾게 되면 "민감한 정보!"가 출력되고 네 번째 콘솔은 undefined가 출력되는 것을 확인할 수 있습니다.
Symbol의 경우 변경이 불가능한 데이터이고 유일한 식별자를 만드는 용도이기 때문에 Symbol 함수로 생성한 데이터는 유일한 데이터라서 다른 데이터와 비교가 불가능합니다. 때문에 Symbol("hello")로 새롭게 만들어 user 객체에서 찾아도 다른 식별자라서 위와 같은 결과가 나오게 됩니다.
*심볼 데이터를 활용하여 객체를 만들 경우 시각적으로 확인은 가능하지만 코드로 조회하는 것이 불가능하기 때문에 해당 심볼 데이터가 할당된 변수를 사용하여 조회를 해주어야 합니다.
BigInt
BigInt는 길이 제한이 없는 정수이며, 숫자 데이터가 안정적으로 표시할 수 있는 최대치(2^53-1) 보다 큰 정수를 표현할 수 있고, 정수 뒤에 'n'을 붙이거나 'BigInt()'를 호출하여 생성해주어야 합니다.
console.log(1231231231231231231231231231231231231231231231321);
console.log(1231231231231231231231231231231231231231231231321n);
console.log(BigInt("1231231231231231231231231231231231231231231231321"));
첫 번째 콘솔에서 엄청 큰 정수를 출력하게 되면 최대치를 넘어섰기 때문에 정상적으로 출력을 하지 못하고 있습니다.
이때 앞서 언급한 대로 정수 뒤에 'n'을 붙이거나 'BigInt()'를 호출하여 생성해주게 되면 더 이상 숫자 데이터가 아닌 BigInt 데이터가 되어 위와 같은 결과를 확인할 수 있습니다.
const a = 11n;
const b = 22;
// 숫자 => BigInt
console.log(a + BigInt(b)); // 33n 출력
console.log(typeof (a + BigInt(b))); //bigint 출력
// BigInt => 숫자
console.log(Number(a) + b); // 33 출력
console.log(typeof (Number(a) + b)); // number 출력
BigInt 데이터도 정수이기 때문에 연산이 가능하며, BigInt 데이터와 Number 데이터 연산 시 위와 같은 변환을 거친 후 연산을 진행해주어야 합니다.
'JavaScript' 카테고리의 다른 글
lodash를 활용한 깊은 복사 (0) | 2022.12.23 |
---|---|
원시값과 참조값 (0) | 2022.12.23 |
History (0) | 2022.12.23 |
Location (0) | 2022.12.22 |
Cookie, Storage (0) | 2022.12.22 |