개발팁2018. 12. 19. 10:29

자바스크립트의 데이터타입에 따라, 숫자는 0으로 초기화 하고, 문자열은 "" 으로 초기화 한다던가 할 수 있다.

 

json 객체는 그 안에, 숫자,문자,배열,함수,nested 객체 등의 여러 형식을 포함 할 수 있다.

 

 

jquery 의 $.each 를 통해서, 객체 개개의 항목에 접근할 수 있고,

 

또 자바스크립트의 typeof 를 통해, 각 항목의 데이터 타입을 알아낼 수 있다.

 

 

typeof 로 알아 낼 수 있는 데이터타입은 6가지가 있다.

 

"number", "string", "boolean", "object", "function", "undefined"


참고 : https://msdn.microsoft.com/ko-kr/library/259s7zc1(v=vs.94).aspx

 

jquery 에서도 typeof 와 비슷한 함수를 제공하는데,

 

 

$.type 을 이용하면, typeof 의 6가지 외에,

 

"null", "array", "date", "error", "symbol", "regexp" 등의 형식도 알 수 있다.

 

참고 : https://api.jquery.com/jQuery.type/

 

 

실제로, typeof 에서는 대부분 object 로 구분하는 형식에 대해서, $.type 은 상세한 형식을 알려주는 것을 볼 수 있다.

 

typeof([])
"object"

 

$.type([])
"array"

 

typeof(null)
"object"

 

$.type(null)
"null"

 

typeof(/test/)
"object"

 

$.type(/test/)
"regexp"

 

 

이제, $.each 와 $.type 을 이용하여, object 를 초기화 하는 함수를 만들 수 있다.

 

$.ObjectInitialize = function (obj) {


    let self = this;
    self.obj = obj;

 

    $.each(obj, function (item_name, item) {


        let datatype = $.type(item);

 

        if (datatype == "number")
            self.obj[item_name] = 0;   // 정수는 0 으로 초기화


        else if (datatype == "string")
            self.obj[item_name] = '';   // 문자는 '' 으로 초기화


        else if (datatype == "boolean")
            self.obj[item_name] = false;   // boolean 는 false 으로 초기화


        else if (datatype == "array")
            self.obj[item_name] = [];   // 배열은 [] 으로 초기화


        else if (datatype == "object")
            self.obj[item_name] = {};   // object는  {} 으로 초기화


    });

 

 

 

배열은 [] 으로 초기화 하고, object 는 {} 으로 초기화 하고 있다.

 

a = { x:10, y:"10", z: { k:10, l:"abcd" } };

 

$.ObjectInitialize(a);

 

 

 

 

위에서는 nested object 를 처리하지 않고 있지만, 중첩 객체도 다시, 초기화를 할 수 있다.

 

$.ObjectInitialize = function (obj, deep) {


    let self = this;
    self.obj = obj;

 

    $.each(obj, function (item_name, item) {


        let datatype = $.type(item);

 

        if (datatype == "number")
            self.obj[item_name] = 0;   // 정수는 0 으로 초기화


        else if (datatype == "string")
            self.obj[item_name] = '';   // 문자는 '' 으로 초기화


        else if (datatype == "boolean")
            self.obj[item_name] = false;   // boolean 는 false 으로 초기화


        else if (datatype == "array")
            self.obj[item_name] = [];   // 배열은 [] 으로 초기화


        else if (datatype == "object") {
            if (deep)   // deep 적용 : object 를 다시 $.ObjectInitialize 를 호출하여 초기화 한다.
                $.ObjectInitialize(self.obj[item_name]);
            else
                self.obj[item_name] = {};   // object는  {} 으로 초기화
        }


    });

 

 

deep 옵션에 따라 nested objet 도 초기화 하도록 변경을 했다.

 

 

 

a = { x:10, y:"10", z: { k:10, l:"abcd" } };

 

$.ObjectInitialize(a, true);

 

 

 

Posted by 헝개