[자바스크립트] 데이터 타입 - 기본형(원시 타입, Primitive Type)

minidoo·2020년 10월 19일
1
post-thumbnail

데이터 타입의 종류

  • 기본형(원시 타입, Primitive Type)
    숫자(Number), 문자열(String), 불리언(Boolean), null, undefined, 심볼(Symbol)
  • 참조형(Reference Type) : 객체(Object)
    배열(Array), 함수(Function), 날짜(Date), 정규표현식(RegExp), Map, WeakMap, Set, WeakSet

1. 숫자(Number)

toString()

문자열을 반환한다.
toString 함수의 인자값으로 숫자를 넣게 되면 해당 숫자 진수로 변환된 후 반환된다.

let num = 3;

console.log(num);			// 3
console.log(num.toString());		// '3'
console.log(num.toString(2));		// '11' (2진수)

Number.isNaN()

주어진 값이 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);		

toFixed()

숫자를 고정 소수점 표기법으로 표기해 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. 문자열(String)

문자열을 표현하는 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'이다. 문자열은 불변값이기 때문이다.

charCodeAt()

주어진 인덱스에 대한 UTF-16 코드를 나타내는 정수를 반환한다.

// 소문자는 대문자보다 크다.

console.log('a'.charCodeAt(0));		// 97
console.log('A'.charCodeAt(0));		// 65

String.fromCharCode()

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"));		// ❤️

3. 불리언(Boolean)

  • Truthy 한 값: '0', 'false', [], {}, function() {}
  • Falsy 한 값: 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

4. null과 undefined

  • 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

5. 심볼(Symbol)

이름의 충돌 위험이 없는 유일한 객체의 프로퍼티 키(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) }

참고 사이트

https://poiemaweb.com/es6-symbol

0개의 댓글