이 글은 자바스크립트 개론을 읽고 개인적으로 정리한 내용입니다.


자바스크립트 기초: 값, 변수, 제어 흐름

값의 타입 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를 사용하면 된다.


+ Recent posts