Nodejs(express) 통신 CORS, CORS Pre-Flight 설정하기
Javascript #1 자바스크립트의 데이터 타입
2017-03-25
Explanation
자바스크립는 String, Number, Boolean, undefined, null, Object의 데이터 타입을 가지고 있습니다. 여기에서 String, Number, Boolean은 몇가지 메소드를 사용할 수 있기 때문에 마치 객체처럼 보일 수 있지만, String, Number, Boolean은 값이 변하지 않는 원시 데이터로 객체라 부르지 않습니다.
String, Number, Boolean에서 사용되는 메소드들은 자바스크립트 내부에서 임시로 해당 데이터를 객체로 만들고 메소드를 실행한 후 다시 원시 데이터로 돌아가는 성질을 가지고 있어, 이들을 유사객체라고 부르기도 합니다.
자바스크립트는 직접 입력할 수 없는 문자를 포함시킬 수 있는 이스케이프 시퀀스를 제공합니다.
또한 \uhhh와 같은 표기법으로 유니코드를 사용할 수도 있습니다.(h = 16진수)
1 2 3 4 5 6 7 8 |
'A' === '\u0041' //이스케이프 시퀀스로 유니코드 문자열 '\b' //백스페이스 '\t' //탭 '\n' //줄 바꿈 //ex. console.log('abc \n abc'); |
1 2 |
abc abc |
자바스크립트의 Number는 “64비트 형식 IEEE 754 값” 으로 정의되어 있습니다.
’64비트 형식’ : -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
‘IEEE 754 값’ : IEEE 에서 제정한 부동소수점 표현에 대한 기순 표준
여기에서 IEEE 754의 표준에 의해 NaN과 Infinity가 정의되는 것으로 생각됩니다.
2-1. NaN
NaN은 ‘Not a Number’의 약자로 내장 객체 Math 메소드가 실패하거나 파싱 실패시 반환되는 값으로 NaN은 ‘Not a Number’라는 풀이가 무색하게도 데이터 타입은 Number이며 자신을 포함한 어느 값과도 같지 않는 특징을 가지고 있습니다.
1 2 |
console.log(typeof NaN); //Number console.log(NaN === NaN); //false |
2-2. Infinity
Infinity는 이름 그대로 무한대를 나타내며 0보다 큰 양의 무한대는 Infinity, 0보다 작은 음의 무한대는 -Infinity로 표현됩니다.
1 2 |
console.log(1 / 0); //Infinity console.log(-1 / 0); //-Infinity |
2-3. 소수점 계산 오류
자바스크립트로 소수점 계산을 하다보면 예상한 결과와 다른 값이 나올때가 있습니다.
1 |
console.log(0.1 + 0.2); //0.30000000000000004 |
IEEE 754의 표준에 근하여 실수를 이진수로 변환하여 연산을 하는데, 이때 소수점 이하의 자리수를 이진수로 변환하는 과정에서 무한대로 반복되는 수가 있습니다. 그리고 그 수는 근사치값으로 계산이 되어 결과적으로 예상과 다른 결과가 나타나게 됩니다.
대부분의 전자기기가 2진법 체계를 따르고 2진법으로 소수를 표현하는 것 자체가 근사값의 개념이므로 대부분의 프로그래밍 언어에서 동일하게 발생하는 현상입니다.
Boolean은 ture, false 값을 갖는 논리 데이터 타입입니다. 아래의 간단한 조건문은 Boolean함수의 약식 표현입니다.
1 2 3 4 5 6 |
if(1 === 1) { console.log('참'); //'참' } if(Boolean(1 === 1)) { console.log('참'); //'참' } |
Boolean에서 false으로 반환하는 값들은 아래와 같습니다.
1 2 3 4 5 6 |
Boolean(false) //false Boolean(null) //false Boolean(0) //false Boolean(undefiend) //false Boolean(NaN) //false Boolean('') //false |
undefined는 선언은 되었지만 정의되지 않았거나 참조하는 객체를 지정하지 않은 데이터 타입를 말합니다.
1 2 3 4 |
var a; console.log(typeof a); //'undefined' var a = {}; console.log(typeof a.b); //'undefined' |
null은 개발자가 의도적으로 빈 값을 부여한 데이터 타입입니다.
1 2 3 |
var a = null; console.log(a); //null console.log(typeof a); //'Object' |
일반적으로 undefined는 하나의 로직의 플로우 속에서 값이 할당되기 이전까지의 상태적으로, 그리고 null은 선언된 값을 비우거나 참조하는 객체를 초기화하여 메모리 관리를 위해 사용되는 것으로 생각됩니다.
‘더글라스 크락포드의 자바스크립트 핵심가이드’를 참고하면 객체의 값으로 undefined를 제외한 모든 값을 사용할 수 있다고 적혀 있습니다. 실제로 변수나 객체의 값으로 의도적으로 undefined를 사용한다고 해서 문법 오류를 출력하지는 않지만 그는 의미론적으로 좋은 방식이라 생각되지 않습니다.
자바스크립트의 객체는 이름(key)과 값(value)으로 이루어진, 변형 가능한 속성들의 집합을 말합니다. 그리고 속성들을 흔히 프로퍼티라 부르며 프로퍼티 명(key)으로는 빈 문자열을 포함한 모든 문자열을 사용할 수 있으며 값(value)으로는 undefined를 제외한 모든 값을 사용할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 |
var a = new Object(); //생성자 함수 var a = {}; //객체 리터널 a.a = 'a'; a[''] = 'a'; a.111 = '222'; //SyntaxError a['111'] = '222'; console.log(a[111]); //'222' |
프로퍼티의 값으로 함수도 사용할 수있으며, 객체에서의 이 함수를 메소드라 부릅니다.
1 2 3 4 5 6 7 8 |
var a = { a.compileNumber: function(str) { return parseInt(str, 10); } }; var b = '111'; console.log(a.compileNumber(b)); //111 |