1. 대소문자
자바스크립트는 대소문자를 구분하는 언어다.
때문에 키워드, 변수, 함수 이름, 그밖에 모든 다른 식별자들을 일관되게 대소문자를 구별해 입력해야
한다. while 키워드를 예로 들면, 'while'이라고 입력해야지, 'While'이나 'WHILE'로 입력해서는 안 된다.
비슷하게 online, online, onLine, onLINE은 모두 별개의 변수 이름을 나타낸다.
그러나 HTML은 대소문자를 구별하지 않는다(비록 XHTML은 대소문자를 구별하긴 하지만).
HTML이 클라이언트 측 자바스크립트와 밀접한관련이 있으므로 이점은 약간 혼란을 일으킬 수 있다.
많은 수의 자바스크립트 객체와 프로퍼티가 HTML 태그나 어트리뷰트의 이름과 동일하다.
HTML에서는 태그나 어트리뷰트 이름을 대소문자를 구별하지 않고 입력해도 되지만 자바스크립트에서는
모두 소문자로 입력해야 한다. 예를 들어, HTML의 onclick 이벤트 처리기 어트리뷰트는 HTML에서 떄떄로 onClick으로 쓰곤 하지만 자바스크립트 코드에서는 onclick으로 써야한다.
(XHTML 문서에서도 마찬가지다).
2. 빈공백
자바스크립트는 프로그램 내 토큰 사이에 존재하는 스페이스나 탭, 줄바꿈(newline) 등을 무시한다.
스페이스나 탭, 줄바꿈 문자들은 프로그램 어디에서도 자유롭게 사용할 수 있으므로, 읽기 쉽고
이해하기 쉬운 코드를 만들기위해 깔끔하고 일관성 있는 형태로 프로그램의 형식을 변경하거나
들여쓰기를 원하는 대로 사용해도 좋다. 그러나 줄나눔(line break) 위치에 관해서는 작은 제약 사항이
하나 존재한다. 이에 대해서는 다음 절에서 설명한다.
3. 선택적인 세미콜론의 사용
C나 C++, 자바에서와 마찬가지로 자바스크립트에서 간단한 문장 다음에는 보통 세미콜론(;)이 따라 나온다. 세미콜론은 각 문장을 구분하는 역할을 한다. 그렇지만 자바스크립트에서는 문장들이 서로 다른 줄에 나타나는 경우 세미콜론을 생략 할 수 있다. 예를 들어, 다음 코드는 세미콜론 없이 작성해도 된다.
a = 3;
b = 4;
그러나 코드가 다음과 같이 작성된 경우에는 첫 번째 세미콜론이 반드시 필요하다.
a = 3; b = 4;
세미콜론 생략은 그리 좋은 프로그래밍 습관이 아니다. 세미콜론을 항상 사용하라.
원칙적으로 자바스크립트는 어떠한 두 토큰 사이에서도 줄을 나눌 수 있게 허용하지만, 자바스크립트가 여러분을 위해 세미콜론을 임의로 삽입하는 경우가 있기때문에 몇 가지 예외 상황이 존재한다. 코드를 두 줄로 나눌 때 앞줄이 온전한 문장 형태라면, 자바스크립트는 여러분이 세미콜론 입력을 빠뜨렸다고 생각하고 여러분을 대신해서 세미콜론을 삽입한다. 아마 이것은 여러분이 원하는 바가 아닐것이다. return, break, continue 문장을 사용할 때에는 이러한 점을 조심해야 한다(각 문장에 대해서는 6장에서 설명할 것이다). 예를 들어, 다음 코드를 보자.
return
true;
자바스크립트는 여러분이 다음 코드를 작성하려 했다고 생각한다.
return;
true
그러나 아마 여러분이 원했던 것은 이 코드일 것이다.
return true;
바로 이런 점을 조심해야 한다. 이 코드는 문법 에러를 발생시키지는 않지만 어떤 결과를 만들어 낼지 알 수 없다. 다음 코드를 작성할 때도 비슷한 문제가 발생한다.
break
outerloop;
자바스크립트는 break 키워드 다음에 세미콜론을 삽입하고 그 다음 문장을 해석하는 도중 문법 에러를 발생시킨다. 비슷한 이유로 후치(postfix) 연산자인 ++나 --도(5장을 참고) 이 연산자가 적용되는 표현식과 항상 동일한 줄에 나타나야 한다.
4. 주석
자바와 마찬가지로 자바스크립트도 C++나 C 스타일의 주석을 모두 지원한다. '//'와 줄 끝 사이에 있는 텍스트는 모두 주석으로 취급되어 자바스크립트에 의해서 무시된다. '/*' 와 '*/' 사이의텍스트도 모두 주석으로 취급된다. 이와 같은 C 스타일 주석은 여러 줄에 걸쳐 나타날 수 있지만 서로 중첩되지는 못한다. 다음 코드 몇 줄은 모두 올바른 자바스크립트 주석이다.
// 한 줄짜리 주석
/* 이것도 주석이다 */ // 또 다른 주석이 여기 있다.
/*
* 또 다른 주석이다.
* 여러 줄에 걸쳐 있다.
*
*/
5. 리터럴
리터럴(literal)은 프로그램에 직접 나타나는 데이터 값이다. 다음은 모두 리터럴이다.
12 // 숫자 12
1.2 // 숫자 1.2
"hello world" // 문자열
'Hi' // 다른 문자열
true // 불리언 값
false // 나머지 불리언 값
/javascript/gi // '정규 표현식' 리터럴(패턴 매칭용)
null // 객체가 존재하지 않음
ECMAScript v3에서는 배열과 객체 리터럴을 위한 표현식도 지원한다.
예를 들어,
{ x:1, y:2 } // 객체 초기자
[1,2,3,4,5] // 배열 초기자
리터럴은프로그래밍 언어에서 중요한 부분을 차지한다. 리터럴이 없이는 프로그램을 작성할 수 없다.
3장에서 다양한 자바스크립트 리터럴을 자세히 설명할 것이다.
6. 식별자
식별자는 간단히 말해서 이름이다. 자바스크립트 식별자는 변수나 함수에 이름을 붙이거나 자바스크립트 코드 내 루프 문에 레이블을 붙이는 데 사용된다. 올바른 식별자가 되기 위한 규칙은 자바나 다른 수많은 언어의 규칙과 동일하다. 첫번째 문자는 알파벳(letter), 밑줄(_) 혹은 달러 표시($)[각주:1] 여야 한다. 이어지는 문자들은 알바벳(letter), 숫자, 밑줄(_) 혹은 달러 표시여야 한다. (자바스크립트가 숫자와 식별자를 쉽게 구별할 수 있게 하기 위해, 숫자는 첫 번째 문자로 허용되지 않는다.) 다음은 모두 올바른 식별자다.
i
my_variable_name
v13
_dummy
$str
ECMAScript v3에서 식별자는 Unicode 문자 집합 전체의 알파벳이나 숫자를 포함할 수 있다. 이 버선의 표준 이전에는 자바스크립트 식별자로 ASCⅡ 문자만 사용할 수 있었다. ECMAScript v3은 Unicode 이스케이프 시퀀스(escape sequence)도 식별자로 사용할 수 있게 허용한다. Unicode이스케이프 시퀀스는 \u와 뒤따르는 16비트 문자 인코딩을 나타내는 16진수 숫자 네 개로 구성된다. 예를 들어, 식별자 파이(π)는 \u03c0으로 쓸 수도 있다. 상당히 어색해 보이는 문법이기는 하나 이 문법은 Unicode 문자가 포함된 자바스크립트 프로그램을, Unicode 문자 집합 전체를 지원하지 않는 텍스트 편집기나 도구에서 읽을 수 있는 형태로 변환하게 해준다.
마지막으로 식벽자는 자바스크립트에서 특별한 목적을 위해 사용되는 키워드들 중 하나가 될 수 없다. 다음 절에서는 자바스크립트에 미리 예약되어 있는 키워드 목록을 살펴본다.
자바스크립트 1.1 이전에는 식별자 내에서 달러 표시를 사용할 수 없었다. 달러 표시는 코드 생성 도우게 의해서 주로 사용되는 것이므로 여러분이 직접 작성하는 코드에서 식별자 내에 달러 표시를 사용하는 것을 피하라. [본문으로]
7. 예약어
자바스크립트에는 몇 가지 예약되어 있는 키워드들이 존재한다.
이 키워드들은 자바스크립트 프로그램 내에서 식별자로(변수 이름, 함수 이름, 루프 레이블) 사용 할 수 없는 단어들이다. 표2-1은 ECMAScript v3에 의해 표준화되어 있는 키워드들을 나열하고 있다. 이 단어들은 자바스크립트에서 특별한 의미를 지니며 그 자체가 자바스크립트 언어의 문법을 구성하는 요소다.
표2-1 예약되어 있는 자바스크립트 키워드들
--------------------------------------------------------------------------------
break do if switch typeof
case else in this var
catch false instanceof throw void
continue finally new true while
default for null try with
delete function return
--------------------------------------------------------------------------------
표 2-2는 예약되어 있는 다른 키워드들을 보여 준다. 이 단어들은 현재 자바스크립트 내에서 사용되지는 않지만 미래에 언어 확장을 대비해 ECMAScript v3에서 미리 예약해 놓은 것들이다.
표2-2 ECMA 확장을 위해 예약되어 있는 단어들
--------------------------------------------------------------------------------
abstract double goto native static
boolean enum implements package super
byte export import!!!!! private synchronized
char extends int protected throws
class final interface public transient
const float long short volatile
debugger
--------------------------------------------------------------------------------
ECMAScript v4 표준의 현재 초안에서는 앞에서 본 정식으로 예약되어 있는 단어들 이외에도 as, is, namespace, use 키워드의 사용을 계획하고 있다. 기존 자바스크립트 인터프리터에서 이 네 가지 단어를
식별자로 사용할 수 없게 막지는 않지만, 어쨋든 이 단어들을 식별자로 사용하지 않는 편이 좋을 것이다.
여러분은 또한 자바스크립트에 의해 미리 정의된 전역 변수나 함수의 이름을 식별자로 사용하지 말아야 한다. 만약 이러한 이름을 사용하여 변수나 함수를 생성 하게 되면 에러가 발생하거나(만약 프로퍼티가 읽기 전용이라면), 아니면 여러분은 기존 변수나 함수를 재정의하는 것이 된다. 스스로 무엇을 하고 있는지 정확히 알지 못한다면 이런 일을 피해야 된다. 표 2-3은 ECMAScript v3표준에 의해 정의된 전역 변수와 함수를 보여준다. 자바스크립트 구현마다 서로 다른 전역 프로퍼티를 정의할 수 있으며 자바스크립트 내장 방식(클라이언트 측, 서버 측 등)에 따라 자신만의 긴 전역 프로퍼티 목록을 가지고 있을 수 있다.
표 2-3 사용하지 말아야 할 기타 식별자들
--------------------------------------------------------------------------------
arguments encodeURI Infinity Object String
Array Error isFinite parseFloat SyntaxError
Boolean escape isNaN ParseInt TypeError
Date eval!!!!! Math RangeError undefined
decodeURI Eval!!!!!Error NaN ReferenceError unescape
decodeURIComponent Function Number RegExp URIError
--------------------------------------------------------------------------------
'IT_Programming > JavaScript' 카테고리의 다른 글
자바스크립트 완벽가이드 - 3.2 문자열 (0) | 2010.07.04 |
---|---|
자바스크립트 완벽가이드 - 3.1 숫자 (0) | 2010.07.04 |
자바스크립트 완벽가이드 - 2.1 문자집합 (0) | 2010.07.04 |
[펌] 자바 스크립트 이벤트를 발생시킨 엘리먼트 찾기 (0) | 2010.06.14 |
[펌] Javascript의 Array 의 element 제거하기 (0) | 2010.05.24 |