자바스크립트 자료형

kiki97 ㅣ 2022. 8. 10. 17:13

반응형

자료형

자바스크립트에서 값은 항상 문자열이나 숫자형 같은 특정한 자료형에 속하고, 여덟 가지 기본 자료형이 있다.

// 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

 

불린형

불린형(논리 타입) truefalse 두 가지 값을 가진 자료형

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"을 출력해준다.
  • 그런데 '함수’형은 따로 없습니다. 함수는 객체형에 속한다.
반응형