JS에는 여덟가지 기본 자료형이 있다.
변수는 자료형에 관계없이 모든 데이터일 수 있습니다.
따라서 어느 순간에는 문자열, 어느 순간엔 숫자가 될 수 있음
let message = "hello";
message = 123456;
이처럼 자료의 타입은 있지만 변수에 저장되는 값의 타입은
언제든지 바뀔 수 있는 언어를 '동적 타입' (dynamically typed)' 언어
숫자형
숫자형은 정수 및 부동소수점 숫자(floating point number)를 나타냅니다
이와 관련된 연산 또한 다양한데 덧셈 뺄셈 나눗셈 곱셈 등이 대표적이지요
또 일반적인 숫자 외에 Infinity, -Infinity, NaN 같은 '특수 숫자 값(specail numeri value)이 포함
- Infinity는 어떤 숫자보다 더 큰 특수 값, 무한대를 나타낸다.
처음 알았네- 어느 숫자든 0으로 나누면 무한대를 얻을 수 있다
- infinity를 직접 참조할 수도 있음
alert( 1 / 0 ); // 무한대
alert( Infinity ); // 무한대
- NaN은 계산 중에 에러가 발생했다는 것을 나타내주는 값. (Not a number)
- NaN에 어떤 추가 연산을 해도 결국 NaN이 반환
alert( "숫자가 아님" / 2 ); // NaN, 문자열을 숫자로 나누면 오류가 발생합니다.
alert( "숫자가 아님" / 2 + 5 ); // NaN
BigInt
내부 표현 방식 때문에 자바스크립트에선 (2**53 -1 = 2의 53승-1) (9007199254740991)보다
큰 값 혹은 -(2**53-1)보다 작은 정수는 '숫자형'을 사용해 나타낼 수 없음.
이 자료형은 표준으로 채택된 지 얼마 안도니 자료형으로, 길이에 상관없이 정수를 나타낼 수 있다
또 정수 리터럴 끝에 n을 붙이면 만들 수 있다. (IE에선 지원안함ㅋㅋ)
// 끝에 'n'이 붙으면 BigInt형 자료입니다.
const bigInt = 1234567890123456789012345678901234567890n;
문자형 (String)
let str = "Hello";
let str2 = 'Single quotes are ok too';
let phrase = `can embed another ${str}`;
다 알겠지만 세번째는
중간에 원하는 변수나 표현식을 문자열(String) 중간에 넣기 위함
let name = "John";
// 변수를 문자열 중간에 삽입
alert( `Hello, ${name}!` ); // Hello, John!
// 표현식을 문자열 중간에 삽입
alert( `the result is ${1 + 2}` ); // the result is 3
이렇게 문자열 중간에 들어간 변수나 표현식은 문자열의 일부가 된다
따옴표들을 넣으면 이렇게 못쓴다.
불린형(Boolean)
여기엔 true아니면 false 밖에 없다.
이외에 비교 결과를 저장할 때도 사용되는데
let isGreater = 4 > 1;
alert( isGreater ); // true (비교 결과: "yes")
'null'값
위에 어떠한 자료형에도 속하지 않는 null은 ('존재하지 않는 객체에 대한 참조')
오로지 null값만 포함하는 별도의 자료형을 만듬
'undefined'값
널 처럼 자신만의 자료형을 형성하는데 값이 할당되지 않은 상태를 나타냄
예를 들어 변수를 선언하고 할당하지 않았다고 하면 자동으로 undefined가 할당
권장하지 않지만 일부러 명시적으로 할당하는 것도 가능.
let age;
alert(age); // 'undefined'가 출력됩니다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
let age = 100;
// 값을 undefined로 바꿉니다.
age = undefined;
alert(age); // "undefined"
객체와 심볼
이건 특수한 자료형인데 다른 자료형은 한가지의 자료형만 표현이 가능해서
원시 자료형이라고 부름 (primitive type)
반면 객체는 데이터 컬렉션이나 복잡한 개체(entity)를 표현가능
그래서 객체는 좀 더 특별한 취급을 받고 추후에 설명하겠음
심볼(symbol)형은 객체의 처음봤다...
고유한 식별자(unique identifier)를 만들 때 사용됨
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는 수학 연산을 제공하는 내장 객체이기에 오브젝트(객체)로 나옴.
내장 객체는 객체형이기에. - typeof null의 결과도 오브젝트인데, 널은 별도의 고유한 자료형을 가지는 특수 값으로
객체가 아니지만, 하위 호환성을 위해 이런 오류를 냅둔거임. 언어의 오류이므로 객체가 아니긴하다 - 피연산자가 함수면 function 을 반환. 근데 '함수'형이라는 건 없음. 함수는 객체형에 속하지만
이게 형식적으로는 잘못된거지만 오래된 규칙을 이기에 호환성을 위해 남겨져있고 실무에선 잘 쓴단다
'JavaScript > Basics' 카테고리의 다른 글
[JavaScript] 형 변환 (0) | 2022.03.09 |
---|---|
[JavaScript] 브라우저에서 유저와 상호작용이 가능한 함수 (alert, prompt, confirm) (0) | 2022.03.09 |
[JavaScript] 변수와 상수 (let, const) (0) | 2022.03.09 |
[JavaScript] 오래된 var의 특징 (0) | 2022.03.09 |
[JavaScript] use strict / 엄격모드 (0) | 2022.03.08 |