var integer = 10; //정수
var double = 10.12; //실수
var negative = -20; //음의 정수
var binary = 0b01000001; //2진수
var octal = 0o101; //8진수
var hex = 0x41; //16진수
console.log(binary,octal,hex);//65,65,65
console.log(binary === octal); //true
console.log(hex === octal); //ture
console.log(1===1.0)//숫자타입은 전부 실수처리이기 때문에 true
console.log(10/0);//Infinity
console.log(-10/0);//-Infinity
console.log(1*"string");//NaN
주의 : 자바스크립트는 대소문자를 구분하기 때문에 NaN을 nan, Nan, NAN등으로 표현하면 에러가 발생함.
var string;
string = 'string';
string = "string";
string = `string`;
//만약 따옴표로 감싸지 않는다면 string을 식별자로 인식함.
일반 문자열 내에서는 줄바꿈이 허용되지 않기 때문에 이스케이프 시퀀스를 사용해야한다.
var template = 'hello
world!'; //SyntaxError
template = 'hello\nworld!';
하지만, 템플릿 리터럴 내에서는 이스케이프 시퀀스를 사용하지 않고도 줄바꿈이 허용되며, 모든 공백도 있는 그대로 적용된다.
var template = `hello
world!`;
var first = "kim";
var last = "name";
//ES5
console.log('My name is ' + first + " " + last);//My name is kim name
//ES6
console.log(`My name is ${first} ${last}`);//My name is kim name
var foo = true;
console.log(foo); //true
foo = false;
console.log(foo); //false
var score = 100;
위의 코드가 실행된다면
1. 리터럴 100을 숫자 타입의 값으로 해석
2. 숫자값 100을 저장하기 위해 8Byte의 메모리 공간 확보
3. 확보된 메모리에 숫자 값 100을 2진수로 저장
score를 참조하는 경우
컴퓨터는 한 번에 읽어 들여야 할 메모리 셀의 크기를 어떻게 알 수 있을까?
- score 변수에는 숫자 타입의 값이 할당되어 있기 때문에 자바스크립트 엔진은 score 변수를 숫자 타입으로 인식하기 때문에 score 변수를 참조하면 8Byte 단위로 메모리 공간에 저장된 값을 읽음
메모리에서 읽어 들인 2진수는 어떻게 해석할까?
만약 메모리에 저장된 값이 0100 0001이라면 숫자는 65지만 문자열로 해석하면'A'이다.
위의 예제의 score에 할당된 값은 숫자 타입의 값이다. 따라서 score 변수를 참조하면 메모리 공간의 주소에서 읽어 들인 2진수를 숫자로 해석한다.
마지막으로 정리하면 데이터 타입이 필요한 이유는 다음과 같다.
1. 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
2. 값을 참조할 때 한 번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해
3. 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해
결국 자바스크립트에서 변수는 타입을 갖지 않고 값이 타입을 갖는다.
따라서 현재 변수에 할당되어 있는 값에의해 변수의 타입이 동적으로 결정된다.
동적 타입은 편리하지만 구조적인 단점도 존재한다.
변수 값이 언제든 변경될 수 있기 때문에 복잡한 프로그램에선 변화하는 변수 값을 추적하기 어려울 수 있으며 값의 변경에 의해 타입도 언제든지 변경되어 값을 확인하기 전에는 타입을 확신할 수 없다. 또, 개발자의 의도와 관련없이 암묵적으로 타입이 자동 변환되기 때문에 오류를 뿜어낼 수 있다.
그렇기 때문에 변수를 사용할 때 주의하도록 하자.