1. 변수 타입
자바(Java)나 C 같은 언어와 달리, 자바스크립트 변수는 타입이 고정되어 있지 않다.
이는 매우 중요한 차이점이다. 다시 말하면, 자바스크립트 변수는 어떠한 데이터 타입의 값이라도 담을 수 있다. Java나 C의 변수가 오직 그것이 선언된 타입의 자료만 담을 수 있는 것과 대조적이다.
예를 들면, 자바스크립트에서는 어떤 변수에 숫자 값을 할당한 후 같은 변수에 다시 문자열을 할당해도
아무런 문제가 되지 않는다. 아래의 코드를 보자.
i = 10;
i = "ten";
C, C++, 자바나 기타 타입 제약이 엄격한 언어에서 위와 같은 코드는 올바르지 않다.
자바스크립트는 변수의 타입 제약이 엄격하지 않기 때문에 편리하게도 저장되는 자료의 타입이 자동으로
변환되는 특징이 있다. 예를 들어 어떤 문자열의 뒤에 숫자를 덧붙이려 하면, 자바스크립트에서는 자동적으로 해당 숫자를 문자열의 형태로 변환하여 덧붙인다. 이러한 데이터 타입 변환은 3장에서 자세히 다룬다.
변수의 타입이 고정되어있지 않기 때문에 자바스크립트는 더 단순한 언어임이 분명하다. C++나 자바 같은
언어에서 변수의 타입을 엄격하게 제약함으로써 얻는 장점은 여러분이 보다 엄격한 프로그래밍 방식을
습관화하도록 강제한다는 것이다. 이러한 습관은 복잡하고 방대한 프로그램을 작성, 유지, 재사용할 때
도움이 된다. 하지만 대다수의 자바스크립트 프로그램은 짧은 스크립트이기 때문에 이러한 엄격함은
필요치 않다. 오히려, 간단한 문법 덕택에 얻는 혜택이 더 많다.
2. 변수 선언
자바스크립트 프로그램에서 어떤 변수를 사용하려면 일단 그 변수를 선언해야만 한다.[각주:1]
변수 선언에는 다음과 같이 var 키워드를 사용한다.
var i;
var sum;
하나의 var 키워드에서 여러 개의 변수를 선언할 수도 있다.
var i, sum;
또한 변수의 선언과 초기화를 함께 할 수도 있다.
var message = "hello";
var i = 0, j = 0, k = 0;
만일 var 문에서 변수의 초기값을 지정하지 않을 경우 변수 선언은 되지만, 값이 저장되기 전까지 값은 undefined이다. for 루프 또는 for/in 로프(6장에서 설명함)에서 var 문을 쓸 수도 있다.
즉, 루프 문법 안에서 직접 루프 변수를 선언함으로써 코드를 간결하게 할 수 있다.
다음의 예를 보자.
for(var i = 0; i < 10; i++) document.write(i, "<br>");
for(var i = 0, j = 10; i < 10; i++, j--) document.write(i*j, "<br>");
for(var i in o) document.write(i, "<br>");
var 문으로 선언된 변수는 영구적이다.
delete 연산자를 사용해서 그 변수를 제거하려 할 경우 에러가 발생한다
(delete 연산자는 5장에서 설명한다.).
1) 만일 여러분이 명시적으로 변수를 선언하지 않으면, 자바스크립트가 암묵적으로 그 변수를
선언할 것이다. [본문으로]
4.2.1 변수 선언의 반복과 생략
var 구문으로 같은 이름의 변수를 여러 번 선언해도 무방하다.
만일 그 반복된 선언에 변수 초기화 구문이 함께 있을 경우 그저 변수에 값을 할당하는 구문과 동일하게
작동한다. 선언되지 않은 변수의 값을 읽으려 할 경우 에러가 발생한다. 만일 아직 var 문으로 선언되지 않은 변수에 값을 할당하려 하면, 자바스크립트가 암묵적으로 그 변수를 선언한다.
단, 암묵적으로 선언되는 변수는 항상 전역 변수로 선언된다.
설사 그 변수가 함수 안에서 쓰인다 하더라도 마찬가지다. 여러분이 단일 함수 내에서만 쓸 지역 변수를
의도하거나 전역 변수의 생성을 막으려 한다면 (또는 이미 존재하는 전역 변수를 사용하는 것을 막으려면)
반드시 해당 함수 안에서 var 문을 써야 한다.
전역 변수, 지역 변수에 관계없이 모든 변수의 선언에 항상 var 문을 쓰는것이 최선이다.
(지역 변수와 전역 변수의 차이는 이어지는 절에서 구체적으로 살펴볼 것이다.)
'IT_Programming > JavaScript' 카테고리의 다른 글
자바스크립트 완벽가이드 - 4.4 기본 타입과 참조 타입 (0) | 2010.07.04 |
---|---|
자바스크립트 완벽가이드 - 4.3 변수의 유효 범위 (0) | 2010.07.04 |
자바스크립트 완벽가이드 - 3.15 값에 의한 vs. 참조에 의한 (0) | 2010.07.04 |
자바스크립트 완벽가이드 - 3.14 객체에서 기본 타입으로 변환 (0) | 2010.07.04 |
자바스크립트 완벽가이드 - 3.13 기본 데이터 타입 래퍼 객체 (0) | 2010.07.04 |