기본 데이터 형식 JavaScript에는 데이터 형식으로 아래의 형식이 있다. 기본 형식 String Number Boolean 합성(참고) 형식 Object Array 특정 형식 null undefined이중 null과 undefined라는 특정 형식이 늘 사람을 혼란스럽게 만든다. null null은 보통 객체 타입의 특수한 값, 즉 어떠한 객체도 나타내지 않는 값으로 취급된다. null은 다른 모든 값들과 구분되는 고유한 값이다. 어떤 변수가 null값을 가지면 그 변수는 기본 형식(String, Number, Boolean)이나 합성 형식(Object, Array)의 값을 담고 있지 않다는 것을 의미한다. 따라서 어떤 변수의 값을 초기화 하고 싶을 경우엔 null을 사용한다. var a = "문자..
JavaScript는 메소드 오버로딩이 없다. 매개변수의 갯수나, 속성, 리턴값의 일치여부를 체크하지 않는다. 함수를 선언하고 해당 함수가 호출되기 전 동일 네임의 함수가 다시 선언되는 경우 그대로 덮어쓴다. 하지만 메소드 오버로딩의 구현은 가능하다. 이를 구현한 소스가 있다. 자바스크립트의 전도사로, jQuery의 개발자로 유명한 John Resig의 소스이다. 원글 : http://ejohn.org/blog/javascript-method-overloading 아래와 같다. // addMethod - By John Resig (MIT Licensed) function addMethod(object, name, fn){ var old = object[name]; object[name] = functio..
JavaScript로 구현한 소스 중 눈에 띄는 소스를 소개합니다. jQuery를 이용한 fisheye menu : http://www.ndesign-studio.com/blog/design/css-dock-menu/ JavaScript만을 이용한 fisheye menu : http://eudock.jules.it/index-eudock2.0.php 정말 멋진 JavaScript 소스 중 하나. 현재 이 블로그의 아래에 달린 RSS 구독 아이콘에 적용된 것이 바로 fisheye menu 입니다. 아이콘의 출처 : http://krang.tistory.com/378
prototype 속성은 객체에 새로운 속성이나 메소드를 추가할 때 사용한다. 그냥 추가하면 되는데 왜 prototype이란 개념이 있을까? '함수의 호출 - 3. 생성자 호출 패턴'에서 사용한 호출 구문을 보자. var A = function(string) { this.aValue = string; this.getValue = function() { return this.aValue; } } var a = new A("a의 값"); document.write(a.getValue()); 예제1. 생성자 A는 aValue라는 속성과, getValue라는 메소드를 가지고 있다. 위에서 선언한 A 생성자를 prototype을 이용하면 다음과 같다. var A = function(string) { this.aV..
브라우저는 처음 호출된 페이지의 반복성 파일들(image파일, js, css파일)을 사용자의 로컬 디스크에 임시 인터넷 파일로 저장하고 재 호출시에 저장된 파일을 불러들여 사용하게 된다. 매번 같은 파일을 다운로드해야하는 불편함을 줄여주는 좋은 기능이지만 만약 js파일이 시시각각 달라지는 내용을 담고 있는 경우 호출을 어떻게 해야할까? 이런 경우 파일의 뒤에 요청하는 파라메터의 값을 매번 바꾸어주면 된다. 위의 코드가 너무 길다면 아래와 같이 써도 무방하다. "); d라는 이름의 파라메터로 매번 변하는 시간을 값으로 요청을 하면 매번 브라우저는 js파일을 새롭게 갱신하게 된다. 굳이 파라메터의 이름이 d일 필요는 없다. 주의해야 하는 점은 위와 같이 사용한 경우 아래와 같이 브라우저는 인식하게 된다. 따..
변수의 선언 변수를 사용하기 전에 변수를 먼저 선언하는 것이 원칙이며, 변수를 선언할 때는 var 키워드를 사용한다. 선언되지 않은 변수를 사용할 수 없다. 함축적 선언 변수를 명시적으로 선언하지 않더라도, 변수명에 값을 할당하면 변수가 동시에 선언되는 것으로 처리된다. 초기값 변수를 선언하고 값을 할당하여 초기화 하지 않았을 경우, 변수를 호출하면 undefined 값을 갖게 된다. var a =10; var c = a*b; //'b is not defined' 오류 발생 따라서 특정 값을 지정하지 않고 변수를 선언하여 초기화 할 때는 그 변수에 초기값을 할당해야 한다. 아래 4가지 경우를 보자. var b = "가나다" + a; var c = 4 + a + 5; document.writeln(a); ..
객체의 생성 함수의 호출이란 글에서 JavaScript의 함수 호출의 형태를 언급한 적이 있다. 4가지 호출 패턴을 언급했었는데 함수 호출 패턴 메소드 호출 패턴 생성자 호출 패턴 apply 호출 패턴위 4가지였다. 이 중 함수 호출 패턴을 제외한 나머지 3가지는 모두 객체에 대한 선언 및 메소드 호출이다. JAVA라면 해당 Class에 멤버 변수와 멤버 메소드를 선언할 것이다. public class A { String aValue = "aValue is me!"; void aMethod() { System.out.println("aMethod Called"); } } JavaScript 도 객체지향 언어이기 때문에 객체를 생성하는 new 연산자를 제공해준다. '함수의 호출 - 3. 생성자 호출 패턴'..
쿼리 구문 작성 필요한 column만 명시한다. SELECT * 을 사용하는 것은 피한다. 사용하지 않는 데이터를 호출하는 것만으로도 이미 많은 부하가 생긴다. 특히 text 타입의 데이터를 호출하는 경우는 그 정도가 심해진다. data type의 byte가 적은 컬럼을 주로 사용하는 것이 좋다. COUNT(*)을 사용하라. COUNT(특정column) 으로 호출하는 경우가 있다. 이 경우 해당 컬럼의 NULL값을 제외한 COUNT를 가져오게 된다. NULL값을 일일이 체크하면 호출 속도가 저하되게 된다. NULL을 체크해야 하는 경우가 아닌 대부분의 경우 COUNT(*)을 체크한다. COUNT(*)는 NULL값의 경우도 모두 count에 추가하지만 그로 인해 성능의 저하가 많이 줄어든다. List 호출..
실행 제어 순서 JavaScript가 실행되다 함수를 호출하는 부분을 만나면 현재의 실행을 잠시 중단하고 제어를 매개변수와 함께 호출한 함수로 넘긴다. function writeOther() { document.write(3); } document.write(1); writeOther(); document.write(2); 위의 실행의 결과는 132가 된다. 실행의 제어가 잠시 writeOther 함수로 넘어가게 되었고 해당 함수의 실행이 모두 끝나게 되면 다시 제어는 원래 실행되던 부분으로 돌아가게 된다. 매개변수의 처리 매개변수를 처리에 관해 JavaScript는 상당히 유연하다. 함수를 호출할 때 넘기는 인수의 개수와 함수에 선언된 매개변수의 개수가 일치하지 않아도 오류가 발생하지 않는다. 인수가 ..
인터넷에 돌아다니는 말장난 중 하나가 있다. 객체지향(object-oriented)과 객체기반(object based)의 차이가 무엇인가요? 라는 질문에 대해 java와 c++은 객체지향이고 javascript는 객체기반이다 object-oriented > delegation-based > instance/prototype-based > object-based 순으로 포괄적인 관계이다. 위와 같은 답변이 달려 있다. (참고1, 참고2)일부는 맞는 말이고 일부는 틀린 말이다. 위의 내용에서는 답변은 맞지만 질문은 틀렸다. 객체지향 언어의 구현 방법 중 하나가 객체기반이다. JAVA는 Class를 기반으로 모든 프로그램이 이루어진다. 객체를 생성하기 위해 Class를 사용하여 호출을 한다. 이를 위해서는 2..