숫자(Number), 문자열(String), 불리언(Boolean), null, undefined, 심볼(Symbol)
배열(Array), 함수(Function), 날짜(Date), 정규표현식(RegExp), Map, WeakMap, Set, WeakSet
문자열을 반환한다.
toString 함수의 인자값으로 숫자를 넣게 되면 해당 숫자 진수로 변환된 후 반환된다.
let num = 3;
console.log(num); // 3
console.log(num.toString()); // '3'
console.log(num.toString(2)); // '11' (2진수)
주어진 값이 NaN인지 판별한다.
NaN이란 'Not a Number'의 약자로 숫자가 아닌, 될 수 없는 것을 의미한다.
console.log(typeof NaN); // number
console.log(typeof Number.isNaN()); // boolean
// true
Number.isNaN(NaN);
Number.isNaN(Number.NaN);
Number.isNaN(0/0);
// false
Number.isNaN(3);
Number.isNaN("hello");
Number.isNaN({});
Number.isNaN([]);
Number.isNaN(undefined);
Number.isNaN(null);
Number.isNaN(true);
숫자를 고정 소수점 표기법으로 표기해 String으로 반환한다.
인자값으로 숫자를 전달하면 해당 자릿수까지 소수점을 표시하고, 나머지는 반올림한다.
console.log(0.1 + 0.2); // 0.30000000000000004
console.log((0.1 * 10 + 0.2 * 10) / 10); // 0.3
console.log((0.1 + 0.2).toFixed(1)); // "0.30"
console.log((0.154 + 0.425).toFixed(2)); // "0.58" (셋째 자리에서 반올림)
문자열을 표현하는 2가지 방법이다.
Template Strings를 사용하면 여러 문자열을 간단하게 합칠 수 있다.
let name = 'miniddo';
console.log('My name is ' + name); // 일반적인 방법
console.log(`My name is ${name}`); // Template Strings
<output>
My name is miniddo
My name is miniddo
문자열은 변경 불가능한 값(Immutable Value)이다.
데이터 타입의 모든 기본형(원시타입)은 불변값이다.
let hello = 'hello';
console.log(hello[0]); // h
hello[0] = 's';
console.log(hello); // hello
위의 코드에서 우리는 hello의 0번째 인덱스인 'h'가 's'로 변하길 기대한다.
그러나 's' 대입 후에도 hello 값은 여전히 'hello'이다. 문자열은 불변값이기 때문이다.
주어진 인덱스에 대한 UTF-16 코드를 나타내는 정수를 반환한다.
// 소문자는 대문자보다 크다.
console.log('a'.charCodeAt(0)); // 97
console.log('A'.charCodeAt(0)); // 65
UTF-16 코드 유닛의 시퀀스로부터 문자열을 생성해 반환한다.
console.log(String.fromCharCode("97")); // a
console.log(String.fromCharCode("65")); // A
그렇다면 이모티콘 형태의 문자는 어떻게 표현할 수 있을까?
charCodeAt 의 인자값에는 문자의 길이를 인덱스 형식으로 받는다.
예를 들어 문자의 길이가 2라면 charCodeAt의 인자에는 0과 1, 총 2개의 숫자를 전달받는다.
fromCharCode의 인자값에 두 개의 숫자를 쌍으로 전달하면 원래의 문자를 얻을 수 있다.
console.log("❤️".length); // 2
console.log("❤️".charCodeAt(0)); // 10084
console.log("❤️".charCodeAt(1)); // 65039
console.log(String.fromCharCode("10084", "65039")); // ❤️
'0', 'false', [], {}, function() {}
0, NaN, false, null, undefined, ''("")
비교 연산자 ===
은 변수 유형까지 고려하는 엄격한 비교이다.
console.log(0 == "0"); // true
console.log(0 === "0"); // false
console.log(0 == []); // true
console.log(0 === []); // false
console.log("0" == []); // false
console.log("0" === []); // false
undefined
: 값이 할당되지 않은 데이터 타입null
: 값이 비어있음console.log(typeof null); // object
console.log(typeof undefined); // undefined
undefined는 변수를 선언만 해도 할당되지만 null은 해당 변수를 null로 바꾼다.
let num;
console.log(num); // undefined
num = null;
console.log(num); // null
이름의 충돌 위험이 없는 유일한 객체의 프로퍼티 키(property key)를 만들기 위해 사용한다.
let mySymbol = Symbol();
console.log(mySymbol); // Symbol()
console.log(typeof mySymbol); // symbol
Symbol은 문자열을 인자로 전달할 수 있다.
이 문자열은 Symbol 생성에 어떠한 영향을 주지 않으며, 생성된 Symbol에 대한 설명(description)으로 사용된다.
let mySymbol = Symbol('symbolText');
console.log(mySymbol); // Symbol(symbolText)
console.log(mySymbol == 'symbolText') // false
console.log(mySymbol == Symbol('symbolText')); // false
Symbol 값도 객체의 프로퍼티 키로 사용할 수 있다.
Symbol 값은 유일한 값이므로 Symbol 값을 키로 갖는 프로퍼티는 다른 어떠한 프로퍼티와도 충돌하지 않는다.
const obj = {};
const mySymbol = Symbol('symbolText');
obj.text = 'hello';
obj[mySymbol] = [];
console.log(obj);
<output>
{ text: 'hello', Symbol(symbolText): Array(0) }