let message = "hello"; message = 123456;
변숫값을 문자열에서 숫자로 바꿔도 에러가 발생하지 않는다.
자료의 타입은 있지만 변수에 저장되는 값의 타입은 언제든지 바꿀 수 있는 언어
let n = 123; n = 12.345;
숫자형(number type) 은 정수 및 부동소수점 숫자(floating point number)를 나타낸다.
숫자형과 관련된 연산은 곱셈[ * ], 나눗셈[ / ], 덧셈[ + ], 뺄셈[ - ] 등이 대표적이다.
숫자형엔 일반적인 숫자 외에 Infinity, -Infinity, NaN 같은
'특수 숫자 값 (special numeric value)'이 포함된다.
어느 숫자든 0으로 나누면 무한대를 얻을 수 있다.
alert( 1 / 0 );
alert( Infinity );
Infinity를 직접 참조할 수도 있다.
alert( "숫자가 아님" / 2 ); // NaN, 문자열을 숫자로 나누면 오류가 발생한다.
자바스크립트에서 행해지는 수학 연산은 '안전’하다고 볼 수 있다.
0으로 나눈다거나 숫자가 아닌 문자열을 숫자로 취급하는 등의
이례적인 연산이 자바스크립트에선 가능하다.
말이 안 되는 수학 연산을 하더라도 스크립트는 치명적인 에러를 발생하지 않는다.
NaN을 반환하며 연산이 종료될 뿐이다.
현실에선 특수 숫자 값을 숫자로 취급하진 않는다.
하지만 자바스크립트에선 특수 숫자 값을 숫자형으로 분류한다.
내부 표현 방식 때문에 자바스크립트에선 2^53 보다 큰 값
혹은 -2^53 보다 작은 정수는 숫자형을 사용해 나타낼 수 없다.
2^53는 16자리 숫자로 이루어진 정수이며,
대부분의 상황에서 이런 제약사항은 문제가 되지 않다.
아주 큰 숫자가 필요한 상황이거나 아주 높은 정밀도로 작업을 해야할 때 필요하다.
BigInt형은 표준으로 채택된 지 얼마 안 된 자료형으로, 길이에 상관없이 정수를 나타낼 수 있다.
const bigInt = 123456789012345678901234567890n;
BigInt는 정수 리터럴 끝에 n을 붙이면 만들 수 있다.
자바스크립트에서는 문자열 ( string ) 을 따옴표로 묶는다.
따옴표는 세 종류가 있다.
큰따옴표와 작은따옴표는 ‘기본적인’ 따옴표로,
자바스크립트에서는 이 둘에 차이를 두지 않는다.
역 따옴표로 변수나 표현식을 감싼 후 $ { ... } 안에 넣어주면 ,
원하는 변수나 표현식을 문자열 중간에 손쉽게 넣을 수 있다.
let name = "John"; alert( `Hello, ${name}!` ); // 변수를 문자열 중간에 삽입 alert( `the result is ${1 + 2}` ); // 표현식을 문자열 중간에 삽입
$ { ... } 안에는 name 같은 변수나 1 + 2 같은 수학 관련 표현식을 넣을 수 있다.
문자열 중간에 들어간 변수나 표현식은 평가가 끝난 후 문자열의 일부가 된다.
큰따옴표나 작은따옴표를 사용하면 중간에 표현식을 넣을 수 없으며,
역 따옴표를 써야만 가능하다.
큰따옴표는 확장 기능을 지원하지 않는다.
불린형 ( 논리 타입 ) 은 true와 false 두 가지 값 뿐이다.
불린형은 긍정이나 부정을 나타내는 값을 저장할 때 사용한다.
let nameFieldChecked = true;(checked). let ageFieldChecked = false; (not checked) let isGreater = 4 > 1; alert( isGreater );
긍정, 부정 혹은 비교 결과를 저장할 때 사용됩니다.
null 값은 지금까지 소개한 자료형 중 어느 자료형에도 속하지 않는 값이며,
null 값은 오로지 null 값만 포함하는 별도의 자료형을 만든다.
자바스크립트에서는 null을 ‘ 존재하지 않는 ( nothing ) ’ 값 ,
‘ 비어 있는 ( empty ) ’ 값 , ‘ 알 수 없는 ( unknown ) ’ 값을 나타내는 데 사용한다.
let age = null;
let age = null; 은 나이 ( age ) 를 알 수 없거나 그 값이 비어있음을 보여준다.
null 값처럼 자신만의 자료형을 형성하며,
undefined는 ' 값이 할당되지 않은 상태 ’ 를 나타낼 때 사용한다.
변수는 선언했지만 , 값을 할당하지 않았다면 해당 변수에 undefined 가 자동으로 할당된다.
let x; alert(x); // 값을 할당하지 않아 undefined
변수가 ‘ 비어있거나 ’ ‘ 알 수 없는 ’ 상태라는 걸 나타내려면 null 을 사용하는것이 좋다.
undefined 는 변수에 값이 할당되었는지 여부를 확인할 때만 사용한다.
객체형을 제외한 다른 자료형은 문자열이든 숫자든
한 가지만 표현할 수 있기 때문에 원시 ( primitive ) 자료형이라 부른다.
객체는 데이터 컬렉션이나 복잡한 개체 ( entity ) 를 표현할 때 사용한다.
심볼(symbol)형은 객체의 고유한 식별자 ( unique identifier ) 를 만들 때 사용된다.
typeof 연산자는 인수의 자료형을 반환한다.
자료형에 따라 처리 방식을 다르게 하고 싶거나
변수의 자료형을 빠르게 알아내고자 할 때 유용하다.
typeof 연산자는 두 가지 형태의 문법을 지원한다.
괄호유무에 상관 없이 결과는 동일하다.
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)