이 글은 자바스크립트 개론을 읽고 개인적으로 정리한 내용입니다.
자바스크립트 기초: 값, 변수, 제어 흐름
값의 타입 6가지
- 숫자, 불리언, 문자열, 객체, 함수, undefined
숫자
자바스크립트는 숫자를 내부적으로 64비트 부동소수점 값으로 표현한다. 다른 언어처럼 정수를 위한 특별한 자료형이 없다. 즉, 정수(Integer)든 소수(Decimal)든 간에 부동 소수점 방식으로 표현되는 것이다.
정수(Integer)도 부동 소수점으로 표현된다는 것은 수의 정확도가 제한됨을 의미한다. 단, 52개의 비트로 표현될 수 있는 정수는 항상 정확하게 계산된다.
하지만 소수(Decimal)의 경우에는 항상 값이 근사치임을 알고 있어야 한다.
문자열
문자열 안에서 이스케이프 기호
\
를 사용하면,\
다음에 오는 문자는 특별한 의미가 있음을 알릴 수 있다. 주로 따옴표'
혹은 쌍따옴표("
), 줄바꿈, 탭을 문자열 안에서 표현할 때 사용된다.문자열을 대상으로 비교 연산자(
>
,<
,>=
,<=
,==
)를 사용하면 유니코드를 기준으로 비교 대상의 문자열의 왼쪽 문자부터 비교한다.
표현식(expression)과 문장(statement)
- 값을 생성하는 코드조각을 표현식(expression)이라 한다.
- 화면에 문자가 출력되거나, 변수에 저장된 값을 변경하는 것처럼 프로그램 상에서 부수효과(side effect)를 일으키는 코드 조각을 문(statement)이라 한다.
환경(environment)
- 특정 시점에 존재하는 변수의 값, 변수의 모음이 있는 공간을 환경이라 한다.
- 프로그램이 구동되면 개발자가 선언한 변수 외에도 브라우저의 표준 변수가 환경에 담긴다.
- 환경은 다른 페이지로 이동할때까지 유지된다.
함수
- 함수는 표준 환경에서 제공되는 값이다.
- 함수는 코드 조각을 담을 수 있으며, 함수값(함수명)은 그런 코드 조각을 가르킨다.
- 함수에 담긴 코드를 실행하는 것은 호출(invoke)하거나 적용(apply)한다고 한다.
- 함수를 호출할 때는 값을 넘겨줄 수 있다.
호출하는 쪽에서 넘기는 값들은 인자(argument)라고 한다.
선언하는 쪽에서 받는 값들은 매개변수(parameter)라고 한다.
반복문
- 반복문의 종류에는
while
,for
,do while
이 있다. while
,for
는 조건이 만족되지 않으면 반복문의 내용이 한 번도 실행되지 않는다.do while
은 조건이 만족되든 안되든 반복문의 내용을 무조건 1번은 실행한다.
undefined
- 값이 할당되지 않는 변수는
undefined
라는 특별한 값을 얻는다. - 코드 상에서 값을 반환하지 않는 함수도
undefined
을 반환한다. - 비슷한 값으로
null
이 있는데,null
은 값이 정의되었지만 아직 값이 없음을 알린다. - 참고로
undefined == null
은 true를 반환한다.
형변환
- 자바스크립트에서 연산자의 피연산자는 자동 형변환이 일어날 수 있다. 두 값중 다른 값의 타입으로 변환이 된다.
- 조건문, 반복문의 조건식의 값이 불리언이 아니면 자동으로 불리언으로 형변환된다.
- 문자열을 대상으로 ‘+’가 아닌 산술 연산자가 사용되면 문자열은 숫자로 형변환된다. 이 때, 숫자가 될 수 없는 문자열을
NaN
이 된다. 문자열이 숫자가 될 수 없는지 판단하기 위해NaN
와 직접 비교하는 것은 정확하지 않다. 변수에NaN
가 있는지 판단할 때는isNaN
함수를 사용하자.
&& 와 ||
- AND(
&&
)와 OR(||
) 연산자는 불리언 값을 반환하지 않고, 정확히 말하면 피연산자를 반환한다. - OR(
||
)은 왼쪽의 값을 보고, 그 값이 불리언으로 변환됐을 때false
이면 오른쪽의 값을 살핀다. 만약 왼쪽의 값이true
이면 오른쪽 값을 살피지 않고 왼쪽의 값을 반환한다. - AND(
&&
)는 왼쪽의 값을 보고, 그 값이 불리언으로 변환했을 때true
이면 오른쪽의 값을 살핀다. 만약 왼쪽의 값이false
이면 오른쪽 값을 살피지 않고 false를 반환한다
기타
- 문자열을 정수로 변환할 때는
Number
객체를 사용한다.parseInt
는 문자열을 해석(parse)할 때 사용한다. - 여기서 말하는
window.isNaN
은 부정확하다. 대신에NaN
를 비교할 때는 ES6에서 포함된Number.isNaN
를 사용하면 된다.