String
표준 빌트인 객체인 String 객체는 생성자 함수 객체로, 형변환으로도 사용될 수 있다
// 숫자 타입 => 문자열 타입
String(1); // -> "1"
String(NaN); // -> "NaN"
String(Infinity); // -> "Infinity"
// 불리언 타입 => 문자열 타입
String(true); // -> "true"
String(false); // -> "false"
// 문자열은 원시값이므로 변경할 수 없다. 이때 에러가 발생하지 않는다.
strObj[0] = 'S';
console.log(strObj); // 'Lee'
유사 배열 객체이므로 인덱스로 접근할 수 있지만 원시 값이라서 변경할 수 없다
- String 프로퍼티: length
- String 메서드: indexOf / search / includes / startsWith / endsWith / charAt / substring / slice / toUpperCase / toLowerCase / trim / repeat / replace / split
Symbol
Symbol 함수로 호출하여 생성되는 심벌 값은 원시 값이지만 리터럴 표기법으로 생성할 수 없다
// Symbol 함수를 호출하여 유일무이한 심벌 값을 생성한다.
const mySymbol = Symbol();
console.log(typeof mySymbol); // symbol
// 심벌 값은 외부로 노출되지 않아 확인할 수 없다.
console.log(mySymbol); // Symbol()
new Symbol(); // TypeError: Symbol is not a constructor
// 심벌 값에 대한 설명이 같더라도 유일무이한 심벌 값을 생성한다.
const mySymbol1 = Symbol('mySymbol');
const mySymbol2 = Symbol('mySymbol');
console.log(mySymbol1 === mySymbol2); // false
생성될 때 외부로 노출되지 않아 확인할 수 없고 다른 값과 절대 중복되지 않는 유일무이한 값이다
const mySymbol = Symbol();
// 심벌 값은 암묵적으로 문자열이나 숫자 타입으로 변환되지 않는다.
console.log(mySymbol + ''); // TypeError: Cannot convert a Symbol value to a string
console.log(+mySymbol); // TypeError: Cannot convert a Symbol value to a number
const mySymbol = Symbol();
// 불리언 타입으로는 암묵적으로 타입 변환된다.
console.log(!!mySymbol); // true
// if 문 등에서 존재 확인을 위해 사용할 수 있다.
if (mySymbol) console.log('mySymbol is not empty.');
문자열이나 숫자로 암묵적 형 변환이 이루어지지 않지만 불리언 타입으로는 변환된다
// 위, 아래, 왼쪽, 오른쪽을 나타내는 상수를 정의한다.
// 중복될 가능성이 없는 심벌 값으로 상수 값을 생성한다.
const Direction = {
UP: Symbol('up'),
DOWN: Symbol('down'),
LEFT: Symbol('left'),
RIGHT: Symbol('right')
};
const myDirection = Direction.UP;
if (myDirection === Direction.UP) {
console.log('You are going UP.');
}
enum과 같이 상수로 활용될 수 있지만 굳이 사용하진 않는다
const obj = {
// 심벌 값으로 프로퍼티 키를 생성
[Symbol('mySymbol')]: 1
};
// getOwnPropertySymbols 메서드는 인수로 전달한 객체의 심벌 프로퍼티 키를 배열로 반환한다.
console.log(Object.getOwnPropertySymbols(obj)); // [Symbol(mySymbol)]
// getOwnPropertySymbols 메서드로 심벌 값도 찾을 수 있다.
const symbolKey1 = Object.getOwnPropertySymbols(obj)[0];
console.log(obj[symbolKey1]); // 1
기존 코드에 영향을 주지 않고 프로퍼티 키를 생성하는 하위 호환성을 보장하기도 한다
본 내용은 위키북스의 '모던 자바스크립트 Deep Dive'를 바탕으로 작성되었습니다.
'Languages > JavaScript' 카테고리의 다른 글
[HUFS/GnuVil] #18 브라우저의 렌더링 과정 (0) | 2022.11.11 |
---|---|
[우아한테크코스/프리코스] #2 숫자 야구 (0) | 2022.11.09 |
[HUFS/GnuVil] #16 Number, Math, Date, RegExp (0) | 2022.11.04 |
[HUFS/GnuVil] #15 배열 (0) | 2022.11.04 |
[우아한테크코스/프리코스] #1 온보딩 (0) | 2022.11.02 |