일반적으로 배웠던 프로그래밍언어의 자료형과는 조금 다른 점이 있다.
또한 변수에 저장되는 값의 타입을 언제든지 바꿀 수 있다는 특징을 가지고 있다.
그런 점에 유의하며 자바스크립트의 자료형에 대해서 배워보자.
⚠️ 자바스크립트에서 변수는 자료형과 상관없이 데이터를 가질 수 있다.
따라서 변수는 문자열을 저장했다가 숫자형을 저장할 수 있다.
자바스크립트는 동적타입언어이다.
동적타입
자료의 타입은 있지만 변수에 저장되는 값의 타입은 언제든지 바꿀 수 있는 언어를 말한다.
// no error
let message = "hello";
message = 123456;
자바스크립트는 정수와 실수를 구분하지 않고 같은 숫자형으로 나타낸다.
추가적으로 일반적인 숫자말고도 숫자형으로 구분되는 Infinity
, -Infinity
, NaN
이 있다.
Infinity
와 -Infinity
NaN
NaN
은 추가 연산을 해도 NaN
이다.자바스크립트에서는 (253-1)(9007199254740991) 보다 큰 값 혹은 -(253-1) 보다 작은 정수는 '숫자형’을 사용해 나타낼 수 없다.
따라서 이것보다 더 큰 숫자를 나타내고 싶으면 BigInt를 이용해야한다.
BigInt형 값은 정수 리터럴 끝에 n을 붙이면 만들 수 있다.
// 끝에 'n'이 붙으면 BigInt형 자료입니다.
const bigInt = 1234567890123456789012345678901234567890n;
자바스크립트에서는 문자형을 따옴표로 표현한다.
모든 따옴표가 동일하게 작동하지는 않고, ${ }을 처리하는 방식에서 차이점이 있다.
''
나 ""
변수나 표현식을 넣고 싶을 때에는 문자열 연산자 +
를 사용한다.
⚠️ 다만 수학관련 표현식은 괄호를 사용해 넣어야한다. 문자열 연산자로 취급하는 듯 함.
``
중간에 변수나 표현식을 ${ }안에 넣을 수 있다.
따옴표처럼 특수 기호를 그대로 출력한다. (특수문자가 기능하지 않고 그대로 출력된다.)
let name = "John";
// 변수를 문자열 중간에 삽입
alert( `Hello, ${name}!` ); // Hello, John!
alert("HELLO, "+name); // HELLO, John!
// 표현식을 문자열 중간에 삽입
alert( `the result is ${1 + 2}` ); // the result is 3
alert( "the result is "+ 1 + 2 ); // the result is 12 (1과 2를 문자열로 처리)
alert( "the result is "+ 1 - 2 ); // NaN
alert( "5"+ 1 - 2 ) // 49
alert( "the result is "+ (1 + 2) ); // the result is 3
문자열 | 의미 |
---|---|
\' | 작은 따옴표 |
\" | 큰 따옴표 |
\\ | 백슬래시 |
\b | 백스페이스 |
\f | 폼 피드 |
\n | 줄 바꿈 |
\r | 캐리지 리턴 |
\t | 가로 탭 |
\ddd | 8진수 문자열(ddd는 3자리 숫자) |
\xdd | 16진수 문자열(dd는 2자리 숫자) |
\udddd | 유니코드 문자열(dddd는 4자리 16진수 숫자) |
특수문자를 그대로 출력하고 싶을 때는 특수문자앞에 \을 붙여주면된다. 문자열에서 더 상세히 다루겠음.
true
와 false
두 가지 값밖에 없는 자료형이다.
⚠️ 문자열이 아니기 때문에 "true"와 true는 다른 값이다.
null
값다른 프로그래밍언어에서 쓰이는 null
하고는 의미가 다르다.
명시적으로 알 수 없는 값, 비어 있는 값, 존재하지 않는 값을 정의하는데 쓰인다.
let age = null; //age를 알 수 없다는 뜻
undefined
값값이 할당되지 않은 상태를 나타낼 때 사용한다.
명시적으로 사용하기보다 변수에 아무것도 할당하지 않았을 때 자동으로 할당된다.
let age;
alert(age); // 'undefined'가 출력됩니다.
원시형이 아니며 특수한 자료형이다. 추후에 다루겠다.
객체의 고유한 식별자를 만들 때 사용하고 추후에 다른다.
//연산자로 사용
typeof x
//함수로 사용
typeof(x)
어떻게 쓰던 결과는 동일하다.
typeof null
결과는 "object"이다. 객체형은 아니지만 하위호환성을 위에 "object"로 출력하며 객체가 아니다.
typeof alert
결과는 "function"이다. 함수형이라는 자료는 없지만 하위호환성을 위해 "function"을 출력한다. 실제로 유용하게 쓰인다고 한다.
문자열 포함식이 복잡하게 느껴질텐데 역시 가장 좋은 방법은 결과를 헷갈리게 코드를 짜지 말고
명시적으로 정확하게 작성하는 것이 좋다.