수 (Numbers)
설계 명세서에 의하면 JavaScript에서 수는 "이중정밀도 64비트 형식 IEEE 754 값"으로 정의됩니다. 이것은 몇가지 흥미로운 결과를 가져옵니다. JavaScript에는 정수와 같은 것이 존재하지 않으므로, C 나 Java 에서 수학 계산을 한 경험이 있다면 산술할 때 약간 조심할 필요가 있습니다. 다음과 같은 경우를 주의해야 합니다.
0.1 + 0.2 = 0.30000000000000004
덧셈, 뺄셈, 계수 (또는 나머지) 연산을 포함하는 표준 산술 연산자가 지원됩니다. 또한 앞에서 언급하는 것을 깜박 잊은 고급 수학 함수와 상수를 다루기 위한 수학(Math)으로 불리워지는 내장 객체가 있습니다.
Math.sin(3.5);
d = Math.PI * r * r;
내장 parseInt()
함수를 사용하여 문자열을 정수로 변환할 수 있습니다. 이는 다음과 같이 옵션으로 주어지는 두번째 매개변수를 밑으로 하여 수행할 수 있습니다.
parseInt("123", 10)
123
parseInt("010", 10)
10
밑을 주지 않으면, 다음과 같이 예상치 못한 결과를 얻을 수 있습니다.
parseInt("010")
8
이 같은 결과는 parseInt
함수가 0으로 시작되는 문자열을 8진수로 취급하기 때문에 발생합니다.
만약 이진수를 정수로 변환하고 싶다면, 밑을 바꾸기만하면 됩니다.
parseInt("11",2)
3
문자열이 수가 아닌 경우 NaN
("Not a Number" (수가 아님)을 줄인 약자)로 불리워지는 특별한 값을 돌려줍니다:
parseInt("hello", 10)
NaN
NaN 는 독성을 가지고 있습니다: 어떤 수학 연산의 입력값으로써 주어지면 그 결과는 역시 NaN
가 되기 때문입니다:
NaN + 5
NaN
내장 isNaN()
함수를 사용해서 NaN
인지 여부를 검사할 수 있습니다:
isNaN(NaN)
true
JavaScript는 또 특별한 값 Infinity
와 -Infinity
를 가지고 있습니다:
1 / 0
Infinity
-1 / 0
-Infinity
문자열 (Strings)
JavaScript에서 문자열은 문자 하나하나가 연결되어 만들어진 것입니다. 좀 더 정확히 말하자면, 각각이 16비트로 표현된 유니코드 문자들이 길게 이어져있는 것입니다. 이는 국제화(i18n, internationalization) 하려하는 누구에게라도 환영받을만한 소식입니다.
한 개의 문자를 나타내려면 길이가 1인 문자열을 사용하면 됩니다.
문자열의 길이를 알고싶다면, 해당 문자열의 length
속성(해당 객체가 소유하고 있는 성질을 나타내는 값)에 접근하면 됩니다.
"hello".length
5
-1 / 0
-Infinity
우리의 첫 JavaScript 객체입니다! 문자열도 역시 객체로 취급된다고 언급했던적이 있죠? 다음과 같이 메소드까지 있는 확실한 녀석입니다.
"hello".charAt(0)
h
"hello, world".replace("hello", "goodbye")
goodbye, world
"hello".toUpperCase()
HELLO
이외의 타입들
JavaScript는 의도적으로 값이 없음을 가리키는 '객체' 타입의 객체인 null
과 초기화되지 않은 값 — 아직 어떤 값도 주어지않은(할당되지않은) 변수임을 가리키는 '정의되지 않음' 타입의 객체인 undefined
로 구분됩니다. 값에 대해서 나중에 언급할 것이지만 JavaScript에서 변수에 값을 주지않고 선언하는 것이 가능합니다. 이럴 경우, 변수의 타입은 undefined
이 되는 것입니다.
JavaScript는 true
와 false
값 (둘은 모두 키워드로 예약되어있는 값)을 가질 수 있는 부울 타입을 가지고 있습니다. 다음과 같은 규칙에 따라 어떤 임의의 값을 부울값으로 변환할 수 있습니다.
false
, 0
, 빈 문자열 (""
), 수가 아님을 뜻하는 NaN
, null
, 와 undefined
은 모두 false
가 됩니다.
다른 모든 값은 true
가 됩니다.
이 변환은 Boolean()
함수를 써서 명시적으로 이 작업을 수행하실 수 있습니다.
Boolean("")
false
Boolean(234)
true
하지만 반드시 이렇게 할 필요는 거의 없습니다. JavaScript는 이러한 변환 작업을 if
문 (아래를 보세요)과 같이 부울값이 필요한 경우를 만나게되면 자동으로 사용자가 모르는 사이에 처리해버리기 때문입니다. 이러한 이유로 인해 우리는 가끔 부울 타입으로 변환되었을 때, true
와 false
이 됨을 의미하는 값들을 각각 "참 값"과 "거짓 값"으로 부를 것입니다. 또는 각각 "참으로 취급되다"와 "거짓으로 취급되다"라는 식으로 불릴 수도 있습니다.
부울 연산자는 &&
(논리적 와, 그리고), ||
(논리적 또는), 그리고 !
(논리적 부정)이 지원됩니다. 아래에서 다시 언급하겠습니다.
변수 (Variables)
JavaScript에서 새로운 변수는 var
키워드로 선언됩니다.
var a;
var name = "simon";
만약 변수에 아무런 값을 주지 않고 선언하면 해당 변수의 타입은 undefined
가 됩니다.
JavaScript에는 블록 유효 범위가 따로 없습니다. 여기에 대한 것은 블록 문장에서 참고바랍니다.
연산자 (Operators)
JavaScript의 산술 연산자로는 +
, -
, *
, /
, %
(나머지 연산자)가 있습니다. 값은 =
연산자로 할당할 수 있고, +=
와 -=
처럼 다른 연산자를 같이사용해서 할당할 수 있습니다. 이렇게 쓰인 연산자는 x = x 연산자 y
와 같은 결과를 나타냅니다.
x += 5
x = x + 5
++
와 --
를 각각 점진적인 증가와 감소에 사용할 수 있습니다. 이들은 또한 전처리 또는 후처리 연산자로 사용될 수 있습니다.
+
연산자는 문자열 이어붙이기도 합니다.
> "hello" + " world"
hello world
문자열에 어떤 수 (또는 다른 값)를 더하면 일단 모두 문자열로 바뀌게 됩니다. 다음 예를 보시면 무슨 말씀인지 아실 수 있을겁니다.
> "3" + 4 + 5
345
> 3 + 4 + "5"
75
빈 문자열에 어떤 값을 더하는 것은 해당 값을 문자열로 바꾸는 요령입니다.
JavaScript에서 비교는 <
, >
, <=
와 >=
를 통해 가능합니다. 이 연산자들은 문자열과 수 양쪽 모두에서 동작합니다. 상동은 약간 직관성이 떨어지는데 이중 등호 (==
) 연산자는 서로 다른 타입을 줄 경우 타입 강제 변환을 수행하기 때문에 다음과 같이 때때로 기대하지 않은 결과를 내보내기 때문입니다.
> "dog" == "dog"
true
> 1 == true
true
타입 강제 변환을 하지 않게 하려면, 삼중 등호 연산자 (===
)를 사용해야합니다.
> 1 === true
false
> true === true
true
이와 비슷하게 !=
와 !==
연산자가 있습니다.
JavaScript는 값을 비트로 취급하는 연산자도 가지고 있습니다. 사용하고 싶을 때 언제라도 사용할 수 있도록 말이죠.
제어 구조
JavaScript는 C 계열의 다른 언어들과 비슷한 제어 구조를 가지고 있습니다. 조건문은 if
와 else
를 지원하는데, 원하시는대로 얼마든지 중첩 시켜서 사용할 수 있습니다.
var name = "kittens";
if (name == "puppies") {
name += "!";
} else if (name == "kittens") {
name += "!!";
} else {
name = "!" + name;
}
name == "kittens!!"
JavaScript는 while
반복문과 do-while
반복문도 사용할 수 있습니다. 첫번째 것은 단순 반복에 유용하게 사용할 수 있고, 두번째 것은 반복문이 반드시 적어도 한번이상 실행 되도록 하고 싶을 때 사용할 수 있습니다.
while (true) {
// an infinite loop!
}
do {
var input = get_input();
} while (inputIsNotValid(input))
JavaScript의 for
반복문은 C 와 Java의 그것과 같습니다. 말하자면, 반복문에 필요한 제어 정보를 한줄에 표현할 수 있다는 이야기지요.
for (var i = 0; i < 5; i++) {
// Will execute 5 times
}
&& 와 ||
연산자는 첫번째 식을 평가한 결과에 따라서 두번째 식을 평가를 실행하는 단축평가(short-circuit) 논리를 사용합니다. 이는 다음과 같이 객체에 접근하기 전에 null 객체인지, 아닌지를 검사하는데 유용하게 사용될 수 있습니다.
var name = o && o.getName();
또는 기본 값 설정을 위해서 다음과 같이 이 성질을 사용할 수 있습니다.
var name = otherName || "default";
JavaScript는 한줄로 조건문을 쓸 수 있게 해주는 삼중 연산자도 가지고 있습니다.
var allowed = (age > 18) ? "yes" : "no";
스위치 문은 숫자나 문자열을 기반으로 다중 분기되는 문장을 작성하는데 사용될 수 있습니다.
var allowed = (age > 18) ? "yes" : "no";<SPAN id=tx_marker_caret></SPAN>