// JavaScript 정규식을 이용한 Byte 계산하기

StringByteLen = string.replace(/[\0-\x7f]|([0-\u07ff]|(.))/g,"$&$1$2").length;


// JavaScript 개선된 For문 Byte 계산하기

stringByteLength = (function(s,b,i,c){

    for(b=i=0;c=s.charCodeAt(i++);b+=c>>11?3:c>>7?2:1);

    return b

})


일반적으로 For문 돌려서 계산하는것 보다 훨씬 빠르다고 한다.


- 참조 : http://programmingsummaries.tistory.com/239

- JAVASCRIPT onClick 스크립트 안에 파라미터 (this.parentNode.parentNode.rowIndex);




var monthLastDay = ( new Date('년', '월', 0) ).getDate();


음.. 화면단 에서만 콤마를 찍고, 실제 DB에는 Integer 값이 들어가므로 콤마(,)가 필요없다.

그러니까, 화면단에 보여줄 <input type="text> 랑 실제 처리 될 입력값 <input type="hidden">

두개를 놓고, submit 하기전에 콤마(,)찍은 화면단의 값을 실제 처리 될 입력 값 <input type="hidden"> 에 넣어주면 된다.


굳이 또, 적자면

<input type="text" name="moneyComma" id="moneyComma" value="<fmt:formatNumber type='number' 

value='${빈이름.변수이름(실제값)}'/>" onkeyUp="js_inputComma(this.value, 'moneyComma')"/>

<input type="hidden" name="money" id="money"/>


이렇게 하고, Submit 하기전에 "moneyComma" 의 값을 콤마제거하고, "money"에 넣고 날리면 되겠지'- ',

- Array.map() : 기존의 배열에 특정 규칙을 적용하여 새로운 배열을 만든다.

EX)
    <script>
        // 배열선언
        var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

  // 배열요소(elements)에 제곱하여 새로운 배열을 만든다.

        var outPut5 = array.map(function (elements) {
            return elements * elements;
        });

        alert(outPut5);
    </script>

 

 

- Array.every() : 배열의 요소가, 특정조건을 모두 만족하는지 확인

- Array.some() : 배열의 요소가, 특정조건을 적어도 하나 막족하는지 확인

- return 값은 Boolean( True & False)

   매개변수(배열의 요소, 배열의 인덱스, 배열객체)

 

- EX)


    <script>
        // 배열선언
        var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

        // 함수선언(배열의 값이 5 보다 작은 것만 등록)
        var lessThanFive = function (element, index, array) {
            return element < 5;
        };

        // 함수선언(배열의 값이 20보다 작은 것만 등록)
        var lessThanTwenty = function (element, index, array) {
            return element < 20;
        };

        var outPut1 = array.every(lessThanFive);    // array 배열의 요소가 모두 5보다 작은지,
        var outPut2 = array.every(lessThanTwenty);  // array 배열의 요소가 모두 20보다 작은지,
        var outPut3 = array.some(lessThanFive);     // array 배열의 요소가 하나라도 5보다 작은지,
        var outPut4 = array.some(lessThanTwenty);   // array 배열의 요소가 하나라도 20보다 작은지

        alert(outPut1);
        alert(outPut2);
        alert(outPut3);
        alert(outPut4);

        alert(outPut5);
    </script>

- Array.filter() : 특정조건을 만족하는 요소를 추출하여 새로운 배열을 만든다.

   매개변수(배열의 요소, 배열의 인덱스, 배열객체)


    <script>
        // 변수선언
        var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

        // 메서드
        var sum = 0;
        var outPut = '';        
        array = array.filter(function (element, index, array) {
            return element <= 5;
        });

        alert(array);
    </script>

- 배열요소가 5보다 작거나, 같은 것만 골라 새로운 배열을 만든다.

- 결과 : 1, 2, 3, 4, 5

 

 

 

 

- JQuery 의 each() 와 비슷하다.

    <script>
        // 변수선언
        var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

        // 메서드
        var sum = 0;
        var outPut = '';

        array.forEach(function (element, index, array) {
            sum += element;
            outPut += index + ' : ' + element + ' -> ' + sum + '\n';
        });
    </script>

 

- 음... array 배열을 for in 으로 반복해서 하는거랑 같은 거의 같다.

  단지, 매개변수(배열의 요소, 배열의 인덱스, 배열객체) 를 갖는다는 점(?)

- 보통 자바스크립트에서 자료형을 검사할때 typeOf 를 사용한다.
   하지만, 생성자를 이용해서 숫자 객체를 생성하면 문제가 발생한다.


    <script>

        // 변수 선언

        var numberType = 273;               // 기본자료형

        var objectType = new Number(273);   // 객체형


        // 출력

        var outPut = '';

        outPut += 'numberType : ' + typeof (numberType) + '\n';

        outPut += 'objectType : ' + typeof(objectType);

        alert(outPut);

    </script>

- 결과


두 변수 모두 숫자이기는 하나 objectType 는 객체이므로 typeOf 으로 자료형을 검사하면 Object 로 나온다.

만약, typeOf 로 값을 숫자여부를 판별하여, 분기처리를 하게되면 정상적인 결과를 얻을 수 없다.

예를 들어,

if( tyoeOf (objetType) == 'number' ) {} 이렇게 해서 무언가 하고자 할 떄 정상적으로 처리할 수가 없게된다.


이러한 두 대상을 같은 자료형으로 취급하여 처리하고 싶을때는 constructor() 메서드를 사용해애한다.

( 기본자료형도 속성이나, 메서드를 사용하면 자동으로 객체로 변환된다. 그래서 Object 타입과 같은 속성, 메서드존재 )


EX) 같은 자료형으로 분류하기

    <script>

        // 변수 선언

        var numberType = 273;               // 기본자료형

        var objectType = new Number(273);   // 객체형


        // 출력

        var outPut = '';

        // Constructor 사용

        if (numberType.constructor == Number) {

            outPut += 'numberType : 숫자네요';

        }

        if (objectType.constructor == Number) {

            outPut += 'numberType : 숫자네요';

        }

alert(outPut);

    </script>

요렇게 '- ' 근데 하다보니 isNaN 써서 Flase 떨어지면 숫자 이걸로 하면 어떻게 될지 궁금해짐



        if (!isNaN(numberType)) {

            alert('numberType는 숫자입니다.');

        }

        if (!isNaN(objectType)) {

            alert('objectType는 숫자입니다.');

        }

이렇게 하니... 둘다 숫자라고 나옴.. 그럼 구지 constructor 쓰는 이유는 또 모지..? 어렵다 '- '

- 프로토타입

: 자바스크립트에서(모 JAVA도 같지만) 생성자를 통해서 객체를 생성할때

속성은 각기 다르지만, 속성값으로 실행되는 메서드(Method)는 처리구문은 같다.

만약 다루는 객체의 수가 1,000개의 객체라면 생성자 안에 있는 메서드도 1,000번을 생성해야 한다.

메모리를 쓸데없이 잡아먹는 굉장히 비효율적인 일이다.

EX)

    <script>

        // 생성자

        var Student = function (name, korean, math, english, science) {

            // 속성

            this.이름 = name;

            this.국어 = korean;

            this.수학 = math;

            this.영어 = english;

            this.과학 = science;

            // 메서드

            this.getSum = function () { return this.국어 + this.수학 + this.영어 + this.과학; };

            this.getAvg = function () { return this.getSum() / 4; };

            this.toString = function () { return this.이름 + '\t' + this.getSum() + '\t' + this.getAvg(); };

        };

</script>


getSum(), getAvg(), toString() 는 같은일을 하는 메서드인데 객체생성마다 발생하는문제를 해결하기위해

'프로토타입(Prototype)' 이라는 공간에 넣고 공통으로 사용하는 것이다.


EX)

        // 생성자

        var Student = function (name, korean, math, english, science) {

            // 속성

            this.이름 = name;

            this.국어 = korean;

            this.수학 = math;

            this.영어 = english;

            this.과학 = science;

        };

        Student.prototype.getSum = function () {

            return this.국어 + this.수학 + this.영어 + this.과학;

        };

        Student.prototype.getAvg = function () {

            return this.getSum() / 4;

        };

        Student.prototype.toString = function () {

            return this.이름 + '\t' + this.getSum() + '\t' + this.getAvg();

        };


        var student = new Student('최우철', 90, 90, 90, 90);

        alert(student.getSum());

        alert(student.getAvg());

        alert(student.toString());

    </script>


* 프로토타입은 우리가 만드는 것이 아니다. 함수 안에 자동으로 만들어지는 배열 arguments 와 마찬가지이다.

그냥 가져다 쓰면되는거...같다(?)


+ Recent posts