프로그래밍/JS

3장) 언어의 기초

소복 2015. 11. 20. 01:40

웹 브라우저에서 가장 널리 구현된 ECMAScript버전은 ECMA-262 3판이므로

아래 내용은 ECMAScript 3판에서 정의된 내용을 바탕으로 한다.


3.1 문법

c와 비슷하다.

어디서든 대소문자를 구분한다.


식별자 : 변수나 함수, 프로퍼티, 함수 매개변수의 이름 (camelCase 방식으로 쓰는 것이 좋다.) 키워드와 예약어를 사용하지 못한다.

- 첫 번째 문자는 반드시 글자나 _ ,  $ 중 하나여야 한다.

- 다른 문자에는 글자나 _ $ 숫자를 자유롭게 사용할 수 있다.


주석 : c와 같다. ( // 혹은 /* */ )


스트릭트 모드 : 자바스크립트를 엄격하게 디버깅한다.

- 전체 스크립트 위 혹은 함수 첫 줄에 "use strict"; 를 쓰므로서 사용할 수 있다.


3.3 변수

변수에 어떤 타입의 데이터라도 저장할 수 있다.

변수를 초기화하지 않으면 undefined를 할당한다.

데이터 타입을 바꾸는 행위는 권장하지 않지만 ECMAScript에서는 유효하다.

함수안에서 var을 생략하고 변수를 선언하면 전역변수로 선언된다. (스트릭트 모드에서는 에러가 반환된다.)

var a=1, b=2;와 같이 선언할 수 있다.


3.4 데이터 타입

ECMAScript에서의 다섯 가지 기본적인 데이터 타입 (primitive data type)

- Undefined, Null, Boolean, Number, String

객체 (Object) 는 이름-값 쌍의 순서 없는 데이터 타입이다.

ECMAScript에서 개발자가 데이터 타입을 정의할 수 없으므로 모든 데이터는 위 여섯 가지 중 하나에 속한다.


typeof 연산자 : 변수의 데이터 타입을 알아내기 위해 사용한다.

- 함수를 제외한 객체 또는 null : "object"

- 정의하지 않은 변수에 사용하면 "undefined"가 반환된다.


Null 타입

- 빈 객체를 가리키는 포인터.

- null==undefined의 결과는 true이다.

- 객체를 사용해야 하지만 객체를 이용할 수 없을 때에는 항상 null이 와야한다.


불리언 타입

- true, false 값만 가진다. (대소문자 구분 O)

- ECMAScript에서 모든 타입을 불리언 값으로 표현할 수 있다. (변환하려면 Boolean()을 사용하면 된다.)


================================ 여기부터는 몇 개만 요약함 =================================


숫자 범위 : 메모리 제한으로 모든 숫자를 ECMAScript로 나타낼 수는 없다.

- Number.MIN_VALUE보다 작으면 -infinity가, Number.MAX_VALUE보다 크면 infinity가 된다.

- 범위 안인지 확인하려면 isFinite()를 사용하면 된다.


NaN (Not a Number) : 숫자를 반환할 것으로 의도한 조작이 실패했을 때 반환된다.

- n/0=NaN, NaN/n=NaN

- NaN==NaN의 결과는 false

3.5 연산자

단항 플러스와 단항 마이너스

- 문자열이나 불리언 값을 숫자로 바꿀 때 사용할 수 있다.


동일 연산자의 특별한 경우

nulll == undefined    true

"NaN" == NaN          false

true == 1                 true

undefined == 0        false

null == 0                 fasle

"5" == 5                  true


3.6 문장

for-in 문

객체의 프로퍼티를 나열하는 데 사용한다.

for (property in expression) {}

ex) for (var propName in window) {}

객체를 가리키는 변수가 null이나 undefined면 에러를 낸다. (ECMAScript 5에서 수정하여 실행하지 않는 것으로 바꿨지만 확인해주는 것이 좋다.)


문장 레이블

label : statement

ex)

outer:

for(){

break outer; 혹은 continue outer;

}

이런 식으로 유용하게 사용할 수 있다.


with 문

코드의 스코프를 특정 객체에 고정한다.

스트릭트 모드에서 금지하며, 성능에 악영향이 있으므로 사용하지 않는 것이 좋다.

ex)

with( object ){

var a = name;        // object.name을 의미한다.

}


3.7.1 매개변수의 이해

ECMAScript 함수는 매개변수 숫자를 따지지 않으며 데이터 타입도 체크하지 않는다.

매개변수 개수가 맞지 않아도 에러로 간주하지 않는다.

- 왜냐하면 매개변수가 내부적으로는 arguments라는 배열 객체로 인식되기 때문이다.

- 오버로딩처럼 이용할 수 있다.

- 넘기지 않은 매개변수는 undefined가 된다.

arguments[0]=10;을 하면 매개변수의 값도 10으로 바뀐다.

- 둘은 같은 메모리 공간을 사용하지 않는다.

- 매개변수의 값을 바꿔도 arguments의 값은 바뀌지 않는다.

- 스트릭트 모드에서는 사용할 수 없다.


값을 반환하지 않는 함수는 사실 undefined를 반환한다.


[출처: 프론트엔드 개발자를 위한 자바스크립트 프로그래밍]