[TIL-05] Javascript의 Value & Type

bvelog·2021년 5월 14일
0

code.camp

목록 보기
5/9

1. Data Type의 종류


코어 자바스크립트, 정재남 저 @

기본형(Primitive)과 참조형(Reference)를 구분하는 기준은 다음과 같다.

  • 기본형은 연산 시 값이 담긴 주솟값을 복사한다.
  • 참조형은 값이 담긴 주솟값들로 이루어진 묶음을 가리키는 주솟값을 복제한다.

기본형은 불변성(immutability)를 띈다. 1-6에서 이 내용에 대해 좀 더 깊게 알아본다.

자바스크립트는 Dynamic typing 언어(동적 언어는 개발 속도가 빠르지만, 다양한 오류를 일으킬 수 있다. 정적 언어인 Typescript로 보완 가능하다)이다. 따라서 직접 데이터의 종류를 define할 필요 없으며, 데이터 종류는 자동적으로 할당된다.

1. String Type (문자열)

  • " " 또는 ' ', 즉 따옴표를 이용해 표현한다. 어느 쪽을 사용하든 상관없으나 코드 내내 사용하는 따옴표는 통일하도록 하자.
  • 문자열은 서로 더할 수 있음. 예를 들어, "I love"와 "chicken"이라는 두 개의 문자열이 존재하는 경우 "I love" + "chicken" = " I love chicken"을 만들 수 있다.
  • 문자열은 유사 배열(Arry)이다.
    유사 배열이기 때문에, index를 이용해 각 문자열에 접근이 가능하다. index는(indexOf, lastindexOf 등) 배열에서 지정된 요소를 찾을 수 있는 메서드이다.
console.log("chicken".legnth);
// expected output: 7
console.log("chicken".indexOf("C");
// expected output: 0

string 역시 유사 배열로 취급되기 때문에, 상기 코드와 같은 메서드를 실행시킬 수 있다. 아래 래퍼 객체에 대한 설명을 읽으면 이해가 쉽다.

2. Number Type (숫자열)

  • 숫자는 말 그대로 '숫자'이다.
  • 따라서 더하기, 빼기, 곱하기, 나누기 등의 연산이 가능하다.
  • MDN의 Math 내장 객체를 사용하면 다양한 연산들이 가능하다. 쌍곡아크사인 같은 것도 가능하다. (https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Math)
  • Infinity 또는 -Infinity처럼 무한을 표현하는 값도 있다.
  • NaN(Not A Number)이라는 값 역시 숫자이다.
Number("123");
// expected output : 123
Number("abc");
// expected output : NaN

하지만, typeOf를 사용할 경우

typeof(Number("123"))
"number"
typeof(Number("abc"))
"number"

"123""abc" 값 모두 Number로 취급된다. NaN 역시 숫자값이기 때문.

막간을 이용해서...

  1. Number() 등의 래퍼 객체란 무엇인가?

Data Type Diagram을 참고하면, JS에는 총 6개의 원시(Primitive) 데이터 타입이 있다.

Number, String, Boolean, null, undefined, symbol

이 원시 타입에 대응하기 위해, JS에는 래퍼 객체(wrapper object)라는 개념이 있다.

String(), Number(), Boolean(), Symbol()

래퍼 객체는 말 그대로, 원시 타입을 감싸는 형태의 객체이다.

원시형 데이터 타입은 본래 객체와 같이 메서드를 가질 수 없으나, JS는 일시적으로 'Number', 'String', 'Boolean', 'Symbol' 타입에 일시적으로 '객체'화가 되는 것을 허락하며, 따라서 메서드를 사용할 수 있게 된다. 즉 래퍼 객체는, 원시 타입 데이터를 객체화 시켜주는 개념이다.

3. Boolean Type

  • True(참) 또는 False(거짓), 두 가지 값이 존재한다.
  • 어떤 값이 Truthy하고, False한지는 후의 1-2 Operation에서 자세하게 후술.

4. Undefined / Null Type

Undefined Type이란?

  • "없음 값"이다. 없다는 "값"이다. 값이 할당되지 않은 "값"인 것.
// 초기값이 할당되지 않은 변수
let hi;
console.log(hi); // undefined

// 초기값이 할당되지 않은 매개변수
function bye (a, b) {
  console.log(a); // 1
  console.log(b); // undefined
}
bye(1);

// 객체에서 존재하지 않는 속성을 접근하는 경우
const person = {
  age: '18'
};
console.log(person.height); // undefined

Null Type이란?

  • "없음" 값이다. 값이 없다는 뜻이다.
  • null === null is true
  • undefined은 값이 아직 할당되지 않거나, 존재하지 않는 경우 사용하는 "없음"이다. null의 경우 존재하지 않는 "없음"이다. 아래 코드를 보자.
let greeting = [ "hi", "hello", ];
console.log(greeting);
// (2) ["hi", "hello"]
let greeting = null;
console.log(greeting);
// null

0개의 댓글