자바스크립트 완벽 가이드/ 데이터 타입과 값

숫자

자바스크립트에서 숫자는 가장 기본이 되는 데이터 타입으로 모든 숫자는 실수로 표현된다. IEEE 754 표준에 의해 정의되는 64비트 실수 형식을 사용하여 표현한다.

다른 내용은 생략

상수 의미
Infinity 무한대를 나타내는 특수한 값
NaN 숫자가 아닌 특수한 값
Number.MAX_VALUE 표현 가능한 가장 큰 수
Number.MIN_VALUE 표현 가능한 (0에 가까운) 가장 작은 수
Number.NaN 숫자가 아닌 특수한 값
Number.POSITIVE_INFINITY 양의 무한대를 표현하는 특수한 값
Number.NEGATIVE_INFINITY 음의 무한대를 표현하는 특수한 값

문자열

문자열은 0개 또는 하나 이상의 Unicode 문자들이 작은 따옴표 혹은 큰 따옴표로 둘러싸인 시퀀스다. 쉽게 말해서 “text”, “10” 은 문자열이 된다. 만일 따옴표 없이 숫자만 쓰면 그것은 숫자가 되고, 따옴표 없이 문자만 쓰면 변수 이름이 된다.

큰따옴표로 둘러싸인 문자들은 작은따옴표로 둘러싸인 문자열 내에 포함될 수 있으며 작은따옴표로 둘러싸인 문자들은 큰따옴표로 둘러싸인 문자열 내에 포함될 수 있다. 문자열 리터럴은 한 줄을 넘지 말아야 한다.

역슬래시 문자( \ )는 자바스크립트에서 특별한 목적을 위해 사용된다.

시퀀스 표현하는 문자
\0 널 문자
\b 백스페이스
\t 수평 탭
\n 줄바꿈 문자
\v 수직 탭
\f 폼 피드
\r 캐리지 리턴
\” 큰 따옴표
\’ 작은 따옴표
\ 역슬래시
\xXX 두 개의 16진수 숫자 XX에 의해 지정되는 Latin-1 문자
\uXXXX 네 개의 16진수 숫자 XXXX에 의해 지정되는 Unicode 문자
\XXX 1과 377 사이의 8진수 숫자 XXX에 의해 지정되는 Latin-1 문자
ECMAScript v3에서 지원하지 않는다. 이 이스케이프 시퀀스는 사용하지 말라

문자열 조작

자바스크립트가 지원하는 기본 기능 중 하나는 여러 문자열을 이어붙이는 것이다. 숫자에 + 연산자를 적용하면 숫자들이 더해진다. 그러나 문자열에 적용하면 두 번째 문자열을 첫 번째 문자열에 이어 붙여 두 문자열을 합친다. 예컨대 “hello” + “world” 는 “helloworld”가 된다.

숫자를 문자열로 변환하기

숫자는 필요할 때 문자열로 자동으로 변환된다. 문자열을 이어붙이는 표현식에서 숫자가 사용될 경우 숫자는 먼저 문자열로 변환된다. 예컨대 “100” + “마리” 는 “100마리” 가 된다.

문자열을 숫자로 변환하기

문자열이 숫자 문맥에 사용되면 자동으로 숫자로 변환된다. 예컨대 “21” * “2” 는 42가 된다.

불리언 값

불리언 값은 진리 값을 나타내는 것으로 true, false 두가지 값만 갖는다. 불리언 값은 무언가가 참인지 거짓인지를 말한다.

함수

함수(function)은 자바스크립트 프로그램에 정의되어 있거나 자바스크리븥 구현에 미리 저의되어 있는 실행 가능한 코드다. 함수는 한 번만 정의하면, 자바스크립트 프로그램 내에서 여러 번 실행될 수 있다. 함수는 계산 대상인 값들을 지정하는 전달인자(argument)나 매개변수(parameter)를 넘겨받을 수 있으며 계산 결과를 나타내는 값을 반환할 수도 있다. –할 수도 있다는 말은 없을 수도 있다는 말

자바스크립트의 중요한 특징 중 하나는 함수도 자바스크립트 코드로 조작할 수 있는 형태의 값이라는 점이다. 다른 많은 언어에서 함수가 단지 언어의 문법적인 요소로서 존재하며 함수는 단순히 정의하고 호출할 수 있는 것이지 데이터 타입은 아닌데 반해, 자바스크립트에서 함수가 실제로 값이라는 사실은 이 언어에 큰 유연성을 부여한다. 이것은 함수를 변수나 배열, 객체에 저자할 수 있으며 다른 함수의 전달인자로 넘겨 줄 수 있다는 것을 의미한다.

함수 리터럴

대부분의 경우 자바스크립트 프로그램에서 함수를 정의할 때 함수 정의 문법을 사용하지만, 자바스크립트는 함수를 정의하는 함수 리터럴 문법도 제공한다. 함수 리터럴은 function 키워드, 함수 이름(생략 가능), 괄호로 둘러싸인 함수 전달인자 목록, 마지막으로 중괄호로 구성된다.

예컨대 function square(x) { return x*x; } 의 함수는

var square = function (x) { return x*x; }

으로도 정의할 수 있다. 함수 리터럴은 고급 스크립트를 작성할 때 꽤나 편리하고 유용하게 사용된다.

함수를 정의하는 방법이 하나 더 있는데, 전달인자 목록과 함수 몸체를 문자열 형태로 Function() 생성자에 전달하는 방법이다. 예컨대

var square = new Function("x", "return x*x;");

인데 이것은 그리 유용하지 않고 비효율적으로 작동하므로 사용하지 않는다.

객체

객체(object)는 이름 붙은 값들의 모음이다. 보통 이 이름 붙은 값들을 객체의 프로퍼티(property)라고 부른다. 객체 프로퍼티를 참조하려면 객체 이름을 쓰고 이어서 마침표와 프로퍼티 이름을 적어 주면 된다. 예컨대 image 객체의 width 프로퍼티에 접근하려면 image.width라고 쓰면 된다.

함수가 객체 프로퍼티로 저장될 경우 그 함수를 메서드라고 부른다. 객체 메서드를 호출할 때는 마침표와 ( ) 를 사용한다. 예컨대 document 객체의 write( ) 메서드를 호출하려면 다음과 같이 쓰면 된다. document.write(“this is a test”);

자바스크립트에서 객체는 연관 배열(associative array)의 역할도 수행한다. 즉, 객체는 임의의 문자열에 임의의 값을 연결한다. 객체가 이러한 방시으로 사용될 경우 객체 프로퍼티에 접근할 때는 다른 문법을 사용한다. 이때는 접근하려는 프로퍼티 이름을 나타내는 문자열을 대괄호로 둘러싸면 된다. image[“width”]; 연관배열은 많은 프로그래밍 기법에 사용되는 아주 효과적으로 사용될 수 있는 데이터 타입이다.

객체 생성

객체는 특수한 생성자 함수를 호출하여 생성할 수 있다.

var o = new Object( ); 
var now = new Date( ); 
var pattern = new RegExp("\\sjava\\s", "i");

일단 객체를 생성하고 나면 마음대로 객체를 사용하고 프로퍼티 값을 설정할 수 있다.

객체 리터럴

자바스크립트는 객체 리터럴(객체 초기자) 문법을 제공한다. 객체 리터럴은 콜론으로 구별되는 프로퍼티 이름/ 값 쌍들이 다시 쉼표로 분리된 목록이다.

var point = { x: 2.3, y: -1.2 }

객체 리터럴은 중첩될 수 있다. 예컨대

var rectangle = { upperLeft: { x: 2, y: 3 }, lowerRight: { x: 4, y: 4} };

객체 리터럴 내에서 사용되는 프로퍼티 값이 상수일 필요는 없다.

객체 변환null이 아닌 객체가 불리언 문맥에서 사용되면 true로 변환된다. 객체가 문자열 문맥에서 사용되면 객체의 toString( ) 메서드가 호출되고 이 메서드가 반환하는 문자열이 대신 사용된다. 객체가 숫자 문맥에서 사용되면 자바스크립트는 먼저 객체의 valueOf( ) 메서드를 호출한다. 이 메서드가 기본 데이터 타입에 해당하는 값을 반환하면 그 값을 사용한다.

배열

배열(array)은 객체처럼 데이터 값들의 모음이다. 객체 내에 포함되는 각 데이터 값에는 이름이 있는 반면, 배열의 각 데이터 값에는 인덱스(index)가 있다. 배열은 다른 배열이나 객체, 혹은 함수를 포함한, 어떠한 자바스크립트 데이터 타입의 데이터라도 담을 수 있다.

배열 생성

배열은 Array( ) 생성자 함수로 생성할 수 있다. 일단 배열을 생성하고 나면, 배열의 어떤 인덱스에라도 얼마든지 엘리먼트를 할당할 수 있다.

var a = new Array( );

배열 원소들을 Array( ) 생성자에 넘겨주어 배열을 초기화 할 수도 있다

var a = new Array(1.2, "javascript", true, { x:1, y:2 } );

Array( ) 생성자에 숫자 하나를 넘겨주면 그 숫자는 배열의 크기로 사용된다. 다음의 예는 원소 10개를 포함한 새 배열을 생성한다.

var a = new Array(10);

배열 리터럴

자바스크립트는 배열을 생성하고 초기화하는 리터럴 문법을 제공한다. 배열 리터럴(배열 초기자)은 대괄호로 둘러싸인 쉼표로 구분된 값들의 목록이다. 대괄호 내 값들은 0부터 시작하는 배열 인덱스에 차례대로 할당된다.

var a = [1.2, "javascript", true, { x:1, y:2 } ];

객체 리터럴과 마찬가지로 배열 리터럴도 중첩될 수 있다.

var matrix = [ [1,2,3], [4,5,6], [7,8,9] ];

null

자바스크립트 키워드 null은 아무런 값도 나타내지 않는 특수한 값이다. null은 보통 객체 타입의 특수한 값, 즉 어떠한 객체도 나타내지 않는 값으로 취급된다. null은 다른 모든 값들과 구분되는 고유한 값이다.

undefined

자바스크립트에서 종종 사용되는 또 다른 특수한 값으로 undefined가 있다. undefined는 선언은 되었지만 값이 할당된 적이 없는 변수에 접근하거나, 존재하지 않는 객체 프로퍼티에 접근할 경우 반환되는 값이다. undefined와 null은 동일한 값이 아님을 주의

정규 표현식

정규 표현식(regular expression)은 텍스트 패턴을 기술하는 데 사용할 수 있는 풍부하고도 강력한 문법을 제공한다. 정규 표현식은 패턴 매칭, 검색, 치환 연산을 구현하는데 사용된다. 자바스크립트에서 정규 표현식은 RegExp 객체로 표현되며 RegExp( ) 생성자로 생성할 수 있다.

Error 객체

ECMAScript v3은 에러를 표현하는 몇 가지 클래스들을 정의하고 있다. 자바스크립트 인터프리터는 런타임 에러가 발생하면 이러한 클래스들 중 하나에 해당하는 객체를 던진다(throw)

값에 의한 vs 참조에 의한

데이터 값 조작 방식은 두 가지인데, 이 둘은 근본적으로 서로 다르다. 이 두 방식은 ‘값에 의한(by value)’ 조작과 ‘참조에 의한(by reference)’ 조작이라고 불린다. 값에 의한 조작은 값이 복사되는 것이라 사본을 조작해도 원본에 변화가 없지만, 참조에 의한 조작은 참조를 조작하면 원본도 같이 조작이 된다.

[ssba]

The author

지성을 추구하는 디자이너/ suyeongpark@abyne.com

댓글 남기기

This site uses Akismet to reduce spam. Learn how your comment data is processed.