자료형
자바스크립트에서 값은 항상 문자열이나 숫자형 같은 특정한 자료형에 속하고, 여덟 가지 기본 자료형이 있다.
// no error
let message = "hello";
message = 123456;
위와 같이 자료의 타입은 있지만 변수에 저장되는 값의 타입이 언제든지 바꿀 수 있는 언어를 '동적 타입 언어'라고 부른다.
원시 타입(Primitive Type)
한번에 하나의 값 만 가질 수 있다. 하나의 고정된 저장 공간을 이용한다.
숫자형
정수 및 부동소수점 숫자를 나타낸다.
숫자형엔 일반적인 숫자 외에 Infinity, -Infinity, NaN 같은 '특수 숫자 값(special numeric value)'이 포함된다.
alert( 1 / 0 ); // 무한대
alert( Infinity ); // 무한대
alert( "숫자가 아님" / 2 ); // NaN, 문자열을 숫자로 나누면 오류가 발생합니다.
alert( "숫자가 아님" / 2 + 5 ); // NaN
- NaN은 계산중에 에러가 발생했다는 것을 나타내 주는 값
- NaN에 어떤 추가 연산을 해도 결국 NaN이 반환된다.
BigInt
내부 표현 방식 때문에 자바스크립트에선 (253-1)(9007199254740991) 보다 큰 값 혹은
-(253-1) 보다 작은 정수는 '숫자형’을 사용해 나타낼 수 없다.
- BigInt형은 표준으로 채택된 지 얼마 안 된 자료형으로, 길이에 상관없이 정수를 나타낼 수 있습니다.
- BigInt형 값은 정수 리터럴 끝에 n을 붙이면 만들 수 있습니다.
// 끝에 'n'이 붙으면 BigInt형 자료입니다.
const bigInt = 1234567890123456789012345678901234567890n;
문자형
빈 문자열이나 글자들로 이루워진 문자열을 나타낼 때 사용한다. (단일 문자를 나타내는 별도의 자료형은 없다)
문자열(string)을 따옴표로 묶습니다
let str = "Hello"; 큰따옴표
let str2 = 'Single quotes are ok too'; 작은따옴표
let phrase = `can embed another ${str}`; 역 따옴표(백틱,backtick)
자바스크립트에서는 큰따옴표와 작은따옴표에 차이를 두지 않는다.
역 따옴표로 변수나 표현식을 감싼 후 ${…} 안에 넣어주면,
아래와 같이 원하는 변수나 표현식을 문자열 중간에 손쉽게 넣을 수 있습니다.
let name = "John";
// 변수를 문자열 중간에 삽입
alert( `Hello, ${name}!` ); // Hello, John!
// 표현식을 문자열 중간에 삽입
alert( `the result is ${1 + 2}` ); // the result is 3
자바스크립트에서 문자형은 원시타입 데이터이다. 문자열 객체와는 다르다.
let str1 = '문자열'; // typeof string
let str2 = new String('문자열'); //typeof object
str1 == str2 // true
데이터 타입이 다르기 때문에 문자열 객체를 문자열로 캐스팅하게 되고, 참조 객체에서 값을 가져와 비교하게 된다.
str1 === str2 //false
불린형
불린형(논리 타입) true와 false 두 가지 값을 가진 자료형
let nameFieldChecked = true; // 네, name field가 확인되었습니다(checked).
let ageFieldChecked = false; // 아니요, age field를 확인하지 않았습니다(not checked)
비교 결과를 저장할 때도 사용된다.
let isGreater = 4 > 1;
alert( isGreater ); // true (비교 결과: "yes")
'null'값
null 값은 어느 자료형에도 속하지 않는 값이다.
null 값은 오로지 null 값만 포함하는 별도의 자료형을 만든다.
let age = null;
자바스크립트의 null값은 다른 언어의 null값과 성격이 다른데,
다른 언어에서는 null을 '존재하지 않는 객체에 대한 참조'나 '널 포인터'를 나타낼 때 사용하지만
자바스크립트에서는 null을 존재하지 않는 값, 비어있는 값, 알 수 없는값을 나타내는데 사용한다.
‘undefined’ 값
undefined 값도 null 값처럼 자신만의 자료형을 형성한다.
undefined는 '값이 할당되지 않은 상태’를 나타낼 때 사용한다.
변수는 선언했지만, 값을 할당하지 않았다면 해당 변수에 undefined가 자동으로 할당된다.
let age;
alert(age); // 'undefined'가 출력됩니다.
- 개발자가 변수에 undefined을 명시적으로 할당하는 것도 가능하지만, 권장하지 않는다.
- 비어있거나, 알수없는 상태라는 걸 나타내려면 null을 사용하자
비 원시 타입(Non- Primitive Type)
한번에 여러 개의 값을 가질 수 있다. 여러 개의 고정되지 않은 동적 공간을 사용한다.
객체와 심볼
객체(object)형은 특수한 자료형이다. 객체는 데이터 컬렉션이나 복잡한 개체를 표현할 수 있다.
심볼(symbol) 형은 객체의 고유한 식별자(unique identifier)를 만들 때 사용된다.
typeof 연산자
typeof 연산자는 인수의 자료형을 반환합니다.
자료형에 따라 처리 방식을 다르게 하고 싶거나 변수의 자료형을 빠르게 알아내고자 할 때 유용하다.
typeof 연산자는 두 가지 형태의 문법을 지원한다.
- 연산자 : typeof x
- 함수 : typeof(x)
괄호가 있든 없든 결과가 동일하다.
typeof undefined // "undefined"
typeof 0 // "number"
typeof 10n // "bigint"
typeof true // "boolean"
typeof "foo" // "string"
typeof Symbol("id") // "symbol"
typeof Math // "object" (1)
typeof null // "object" (2)
typeof alert // "function" (3)
- Math는 수학 연산을 제공하는 내장 객체이므로 "object"가 출력된다.
- typeof null의 결과는 "object"입니다. null은 별도의 고유한 자료형을 가지는 특수 값으로 객체가 아니지만,
하위 호환성을 유지하기 위해 이런 오류를 수정하지 않고 남겨둔 상황이다.
언어 자체의 오류이므로 null이 객체가 아님에 유의! - typeof는 피연산자가 함수면 "function"을 반환합니다. 그러므로 typeof alert는 "function"을 출력해준다.
- 그런데 '함수’형은 따로 없습니다. 함수는 객체형에 속한다.