본문 바로가기

JavaScript

[JavaScript] #2, Data Type 데이터 타입

반응형

JavaScript Data Type 데이터 타입


JavaScript에 Data Type은 총 7가지이다.

그중 6가지는 Primitives data type이라고 불린다.
Boolean, null, undefined, Number, String, Symbol

나머지 1가지는 Object 이다.

아는 거라고 얕보면 안 됨.





Boolean
2가지 값을 가질 수 있다. true  또는 false.

조건문으로 판단할 때, false로 판단되는 경우.

빈 문자열, null, undefined 는 false 그 외는 true.



function main() {
    var test1 = "";
    var test2 = "1";
    var test3 = null;
    var test4 = undefined;

    console.log(checkBoolean(test1));  // false
    console.log(checkBoolean(test2));  // true
    console.log(checkBoolean(test3));  // false
    console.log(checkBoolean(test4));  // true
}

function checkBoolean(value) {
    if (value) {
        return true;
    } else {
        return false;
    }
}

main();


null

null 값 하나만 같게 되는데, 변수에 값이 없다는 걸 표시하는 것이다.
JavaScript에서 특히 조심해야 할 것이 Null과 NULL과는 다르니깐 조심하자.
참고로 ==는 값이 같은지 확인하고, ===은 값과 타입이 같은지 확인한다.
아래 내용 알아 둘 것


typeof undefined     // "undefined"
null === undefined   // false
null  == undefined   // true
null === null        // true
null == null         // true
!null                // true
typeof null          // "object" null의 type은 object이다.


Number

숫자형 데이터 타입이다.

JavaScript에는 정수형, 실수형 int, float, long, double 등등 숫자 자료형이 없다.
그냥 무조건 숫자는 Number

숫자를 대입하더라도 얼만큼 숫자 범위만큼 넣을 수 있는지 생각하면서 사용해야 한다.

어렵게 말하면
ECMAScript 표준에는 배정밀도 64비트 부동 소수점 형(double-precision 64-bit floating-point format -> -(253 - 1) ~ 253 -1사이 숫자) 값으로 표현하고 있다. (이런거 너무 어려움)

그래서 찾아봤더니 쉽게 말해서.
64비트를 사용할건데
1비트는 부호에 사용할거임 -/+인지.
11비트는 지수에 사용할거임 10의 몇승인지 왜냐면 모든걸 다 표시하기에 너무 길어.
52비트는 표시하고 싶은 숫자로 사용.
아래 그림 보면 좀 이해 쉬움.



그래서 여러가지 테스트를 해보았다.


    var num = Math.pow(2, 52);   // 2^52
    console.log(num);            // 4503599627370496
    console.log(num + 1);        // 4503599627370497 계산 됌
    var num1 = Math.pow(2, 53);  // 2^53
    console.log(num1);           // 9007199254740992  
    console.log(num1 + 1);       // 9007199254740992 계산 안됌

253 이상 부터는 계산이 안된다.
큰 숫자를 사용할 때는 주의를 해야겠다는 생각을 했다. 
큰 숫자를 위한 라이브러리들이 있으니깐 참고 (bignumber.js 등등)

참고로 JavaScript가 더이상 소화 못하게 되면 Infinity를 뱉음.
최대값이 궁금할 땐 Number.MAX_VALUE로 보자.




console.log(Number.MAX_VALUE);                    // 1.7976931348623157e+308
console.log(Number.MAX_VALUE + Number.MAX_VALUE); // Infinity
console.log(-Number.MAX_VALUE - Number.MAX_VALUE);// -Infinity


String
텍스트 데이터 타입이다. ''(작은 따옴표) 또는 ""(큰 따옴표)로 텍스트를 넣어서 값 할당한다.
한가지 알아두면 좋은 것은 변경 불가능(immutable)이라는 것이다.

이게 무슨 말이냐면

var test = "bar";
test = "foo";

이러면 변경이 된거 아니냐? 할 수 있지만 사실은 아니다.
JavaScript에서는 변경 불가능(immutable)하기 때문에 
첫번째 줄에서는 "bar" 문자열이 생성 되고 test는 그 주소값을 가르킨다. 
두번째 줄에서는 "foo" 문자열이 생성되고 test는 그 주소값을 가르킨다. 
이때! "bar"는 사라지지 않고 남아 있다. ?!?!?

없애려면 어떻게 해야하지..


Symbol

ES6에서 새롭게 추가 되었다. 
JavaScript 애플리케이션에서 유일하고 변경 불가능한 자료형이다.
대강 사용법은 


이러하다.
유일해야 할 때 사용하면 되겠다.




여기까지, 다시한번 되새기면

boolean, null, undefined, Number, String, Symbol. 
이렇게 6가지는 primitive data type이면서 pass-by-value!!!

pass-by-value는 값을 전달할 때, 즉, 함수에 인자값으로 주거나, 다른 변수에 대입할 때
값이 복사되어 전달 된다.

pass-by-reference는 값이 전달될 때, 참조될 주소값이 전달된다. Object 객체에 해당되는 특성
이거 때문에 문제가 간혹 생기는데, 참조될 주소값이 전달되므로, 누군가(객체 라든지, 함수라든지) 변경하게 되면, 다같이 사용하는 값을 변경시켜 버리는 수가 있다.

다음에 다시한번 정리하도록 해야겠다.




Primitive Data Type 이외에 객체형 타입(Object 타입)이 있다.
다시 말해 Primitive Data Type을 제외한 모든 것은 Object 라고 생각해도 된다.
Array, Function, 정규표현식 등등 Object들이라고 생각하자.

Object는 프로퍼티(property)와 메소드(method)를 포함할 수 있다.
프로퍼티는 이름 : 값 으로 이루어져있는 데이터이다.
메소드는 함수라고 생각하자.

그외 Object에 대해서는 따로 정리를 하는 걸로..

Data는 여기까지.



참고

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures
http://poiemaweb.com/js-data-type-variable



반응형