자료형

하비·2023년 11월 23일

자료형

자바스크립트에는 8가지의 기본 자료형이 있다.
자바스크립트의 변수는 자료형에 관계없이 모든 데이터일 수 있다. 어떤 순간에는 문자, 어떤 순간에는 숫자가 될 수 있음.

//no error
let message = "hello";
message = 123456;

이처럼 자료의 타입은 있지만 변수에 저장되는 값의 타입은 언제든지 바꿀 수 있는 언어를 '동적 타입(dynamically typed)'언어라고 함.
변수가 저장됐어도 바뀔 수 있음.

숫자형

let n = 123;
n = 12.3456;

숫자형(number type)은 정수 및 부동소수점 숫자(floating point number)를 나타냅니다.
관련된 연산에는 곱셈*, 나눗셈/, 덧셈+, 뺄셈- 등이 있음.
숫자형에는 일반적 숫자 외에 infinity, -infinity, NaN 같은 특수 숫자값이 포함됨.

alert(1/0); // 무한대
alert("숫자가 아님"/2);//NaN 문자열을 숫자로 나누면 오류가 발생.

Infinty는 무한의 값, NaN은 에러가 발생했다는 것을 나타냄.
NaN이 나오면 여기에 어떤 추가연산을 해도 NaN이 나오므로 주의해야함.

문자형 + 숫자형의 경우에는 값이 출력됨.

Bigint

내부 표현 방식 때문에 자바스크립트에선 -253-1 ~ 253-1 사이의 숫자만 정수형으로 나타낼 수 있음.
이 범위를 벗어나는 값을 쓸 때는 뒤에 n을 붙이면 BigInt로 들어감.

문자형

자바스크립트에선 문자열(string)을 따옴표로 묶습니다.

let str = "Hello";
let str2 = 'Single';
let str3 = can embed another ${str};

역따옴표로 변수나 표현식을 감싼 후 ${}안에 넣어주면, 아래와 같이 원하는 변수나 표현식을 문자열 중간에 손쉽게 넣을 수 있습니다.

let name = "John";
//변수를 문자열 중간에 삽입
alert(`hello, ${name}!`)// Hello, John!
//표현식을 문자열 중간에 삽입
alert(`the result is ${1+2}`);// the result is 3

``을 이용한 보관 법을 template literal라고 함.
ES5 이상부터 등장한 문법.

let name = 'hobby';
let age = 20;
` 안녕 나는 ${name}야. 내 나이는 ${age}살이야. `
//안녕 나는 hobby야. 내 나이는 20살이야.

글자형은 따로 지원하지 않고 문자형으로 통일 되어 있음.
변수를 ${}로 중간에 끼워 넣는 것을 template literals 라고 함.

불린형

true, false 두 가지로 나뉘는 값.

let nameFieldChecked = true; // 네, name field가 확인되었습니다(checked)
let ageFieldChecked = false; // 아니오, age field를 확인하지 않았습니다(unchecked)

null값

null 값은 지금까지 말한 어느 자료형에도 속하지 않음.
null 값은 오로지 null 값만 포함하는 별도의 자료형을 만듭니다.

자바스크립트의 null은 자바스크립트 이외의 언어의 null과 성격이 다름.
다른 언어에선 null을 존재하지 않는 객체에 대한 참조나, 널 포인터(null pointer)를 나타낼 때 사용.
하지만 자바스크립트에선 null을 존재하지 않는(nothing)값, 비어있는(empty)값, 알수 없는(unknown) 값을 나타내는데 사용.

let age = null; 은 나이 age를 알 수 없거나 그 값이 비어 있음을 나타냄.

undefined 값

undefined 값도 null 값처럼 자신만의 자료형을 형성합니다.
undefined는 '값이 할당되지 않은 상태'를 나타냅니다.

let age;
alert(age);//'undefined'가 출력됩니다.

개발자가 변수에 undefined를 명시적으로 할당하는 것도 가능하나 권하진 않음.
변수가 비어있거나, 알수 없는 상태라는 걸 나타낼 땐 null을 사용하는 것이 좋다.

객체와 심볼

객체(object)형은 특수한 자료형입니다.
객체형을 제외한 다른 자료형은 문자열이든 숫자든 한가지만 표현할 수 있기 때문에 원시(primitive - 원어, 가장 기초적인)자료형이라 부릅니다. 반면 객체는 데이터 컬렉션이나 복잡한 개체(entity)를 표현할 수 있습니다.

숫자형은 숫자형, 문자형은 문자형만을 나타낼 수 있음.
심볼형은 고유한 식별자를 만들 때 사용.

typeof 연산자

typeof 연산자는 인수의 자료형을 반환합니다. 자료형에 따라 처리 방식을 다르게 하고 싶거나, 변수의 자료형을 빠르게 알아내고자 할 때 유용함.

typeof 연산자는 두 가지 형태의 문법을 지원합니다.
1. 연산자: typeox x
2. 함수 : typeof(x)
괄호가 있든 없든 결과 동일.

typeof undefined // 'undefined'
typeof 0 // 'number'
typeof 10n //bigint
typeof Symbol("id") // 'symbol'
*typeof Math // 'object'
*typeof null // 'object'
*typeof alert // 'function'

Math는 수학 연산을 제공하는 내장 객체라서 object가 출력됨(내장객체 = 객체형)
null은 별도의 고유한 자료형을 가지는 특수 값으로 객체가 아니나, 하위 호환성을 위해 그대로 둠. (때문에 module에서도, strcit javascript 상태에서도 object로 뜸)
typeof alert가 function인 이유 역시 함수형은 없지만, 호환성 유지를 위해 그대로 둔 상태.

함수형, 배열형은 없음. 정확하는 객체의 것임.
또한 자바스크립트는 결국 모두 객체로 이뤄져 있기 때문에 어떤 자료형이든 근본적인 프로토타입 값은 object로 나타남.

괄호를 쓰는 경우.

typeof 10 //'number'
typeof 10+5 //'number5'
typeof (10+5) // 'number'

원하는 값을 위해 함수형을 쓰기도 함.

profile
개발자를 꿈꾸는 하비입니다

0개의 댓글