Simplify

[javascript] 2. 자바스크립트의 기본 문법 본문

Web & Server/javascript

[javascript] 2. 자바스크립트의 기본 문법

Simplify - Jonghun 2015. 12. 2. 23:48

2.1. 원시 타입

앞에서 구분한 데이터 타입 가운데 먼저 원시 타입(primitive data type)을 알아본다.

숫자

제목을 "Number" 라고 하지 않고 "숫자" 라고 했다. 여기서 한 가지 구분해 둘 사항이 있다. Number 는 자바스크립트에서 사전에 정의(built-in)해 놓은 문법상의 표현이고, "숫자"는 일반적인 의미의 수를 의미한다.

"Number" 와 "숫자" 는 다른 의미이다.

숫자를 프로그램에서 나타내는 방법으로는 앞에서 언급한 리터럴(Literal) 표현도 있고 별로 사용하지는 않지만 Number 객체를 이용하는 방법이 있다. 사용 빈도가 낮더라도 Number 가 코드상에서 숫자를 표현할 수 있는 방법이라는 것과 이 절의 뒤에서 설명하겠지만 Number 가 "숫자 객체"를 만들 수 있는 한 방법이라는 점을 알아두는 것은 자바스크립트의 객체지향을 이해한다는 차원에서 의미가 있다.

자바스크립트에서 숫자는 정수(123), 실수(12.3), 8진수(0으로 시작하는 숫자, 0377), 16진수(0x 또는 0X로 시작하는 숫자, 0x00) 등 다양한 형식으로 표현할 수 있지만 모든 숫자는 실수(float-point value) 값으로 해석된다. 표현 가능한 범위의 수는 최대 +-1.7976931348623157 x 10^308 그리고 최소 +-5 x 10^-324 다.

정수 표현 : var n1 = 255;
실수 표현 : var n2 = 255.0;
8진수 표현 : var n3 = 0377;  // 3 x 64 + 7 x 8 + 7 = 255 (10진수)
16진수 표현 : var n4 = 0xff;  // 15 x 16 + 15 = 255 (10진수)

프로그램 코드에 직접 나오는 숫자를 "숫자 리터럴(numeric literal)" 이라고 한다. 프로그램에 나오는 숫자 리터럴의 표현 방식은 다르지만 변수 n1, n2, n3, n4 모두 내부적으로는 실수 255를 값으로 갖는다. 리터럴 표현을 만나면 자바스크립트 해석기는 우선 실제값으로 계산한 다음 변수에 저장한다. 그리고 n1, n2, n3, n4 의 타입, 즉 typeof 연산자의 값은 모두 "number" 로 나온다.

typeof n1, typeof n2, typeof n3, typeof n4 → "number"

이런 숫자는 문자열로 변환될 수 있다. "123" + 123 같은 수식을 만나면 자동으로 숫자를 문자열로 변경해서 + 연산을 수행한다. 따라서 다음과 같은 결과가 나온다.

var v = "123" + 123;
typeof v → "string" 반환
v → "123123" 반환

Infinity

자바스크립트에는 앞에서 본 최대 숫자를 벗어나는 숫자를 표현하기 위해 Infinity 라고 하는 값이 저장돼 있다. 실제로 Infinity 타입은 "number" 로 나온다.

typeof Infinity → "number" 반환
자바스크립트에서는 숫자를 0으로 나누는 경우에도 Infinity 를 반환한다.
var v = 1 / 0;
v → Infinity 반환

자바스크립트에서 지원하는 최솟값을 벗어나는 숫자를 표현하고 싶다면 - Infinity 를 사용하면 된다.

var i = -Infinity;
i → -Infinity 반환
typeof i → "number" 반환

typeof -Infinity 의 반환값이 "number" 라는 것을 보면 자바스크립트는 이것도 숫자로 인식한다는 사실을 알 수 있다.

Infinity 와의 어떠한 산술 연술도 결과값으로 Infinity 가 반환된다.

Infinity * 3    → Infinity 반환
Infinity - 9999999999  → Inifinity 반환

NaN

자바스크립트에는 NaN(Not a Number)라는 특수한 값도 있다. 이 또한 숫자값이다.

typeof NaN  → "number" 반환
var a = NaN;
a  → NaN 반환

숫자가 아닌 값이 산술 연산의 피연산자로 사용되면 연산 결과로 NaN이 반한된다.

var a  = 10 * "f";
a → NaN 반환

NaN은 비교 연산에서 약간 이상하게 작동한다. 어떤 숫자와도 비교 연산을 할 수 없을 뿐더러 심지어 자신과도 비교 연산이 디지 않는다. 따라서 NaN == NaN 을 실행하면 false 가 반환된다. 따라서 자바스크립트에서는 어떤 값이 NaN 인지 확인할 때 쓰는 isNaN() 이라는 함수를 제공한다. 숫자값이 NaN 인지 확인하려면 이 함수를 사용해야 한다. isFinite() 라는 함수도 있는데, 이 함수는 인자가 NaN, Infinity, -Infinity 이면 false 를 반환한다. 그 밖에 앞에서 말한 표현 가능한 자리의 수인 경우는 true 를 반환한다.

var v = NaN;
isNaN(v);  → true 반환
isFinite(v);  → false 반환
v = 1;
isFinite(v);  → true 반환

Math

자바스크립트에서는 단순한 산술 연산 외에도 복잡한 수학 연산을 위한 연산자를 하나의 Math 객체에 구현해놓고 있다. Math 객체에 정의된 연산자에는 다음과 같이 접근할 수 있다. 

Math 에는 다음과 같은 형식의 속성과 메서드가 포함돼 있다.

 속성

설명

사용 예 

PI 

원주율값(약 3.14) 

Math.PI 

SQRT2 

2 의 제곱근값(약 1.414) 

Math.SQRT2 

메서드 

설명 

사용 예 

 abs(x)

절댓값 반환 

Math.abs(-7.25)

ceil(x) 

근접한 정수로 올림한 값 반환 

Math.ceil(1.4) 

다음 웹 페이지에 자세한 Math 에 대한 속성, 메서드가 설명돼 있으니 참고한다.

http://www.w3schools.com/jsref/jsref_obj_math.asp

Number

자바스크립트에서는 Number 라는 객체를 제공하는데, Number 는 원시 타입의 숫자를 객체로 만들기 위한 래퍼다. Number 객체를 이용하면 Object 에서 정의한 멤버(속성, 메서드)를 사용할 수 있고 거기에 더해 Number 에서 추가로 정의한 멤버를 사용할 수 있다. 숫자에 대한 Number 객체를 생성하는 방법은 다음과 같다.

var o = new Number(number);

 속성

설명 

사용 예 

 MAX_VALUE

최댓값(양수) 

var v = Number.MAX_VALUE;
v; → 1.7976931348623157e+308 출력 

MIN_VALUE 

0에 가까운 최솟값(양수) 

var v = Number.MIN_VALUE;
v; → 5e-324 출력 

NEGATIVE_INFINITY 

-Infinity 를 나타냄 

var v = Number.NEGATIVE_INFINITY;
v; → -Infinity 출력 

POSITIVE_INFINITY 

Infinity 를 나타냄 

var v = Number.POSITIVE_INFINITY;
v; → Infinity 출력 






















var v = true // 불린




'Web & Server > javascript' 카테고리의 다른 글

[javascript] 1. javascript 기본 개념  (0) 2015.07.26
Comments