JS 표현식과 문

김태환·2023년 2월 23일
post-thumbnail

5장 표현식과 문

5.1 값

값value은 식(표현식expression)이 평가evaluate되어 생성된 결과이다.

여기서 평가는 식을 해석해서 값을 생성하거나 참조하는 것이다.

10 + 20;

위 코드에서는 식 10 + 20이 평가되어 숫자 값 30을 생성한다.

이 값들은 어떻게 저장될까? 모든 값은 데이터 타입(int, double, string 등)을 가지며, 메모리에 2진수, 즉 비트bit의 나열로 저장된다.
따라서, 이 비트의 나열은 데이터 타입에 따라 값이 다르게 해석될 수 있다. 예를 들어 0100 0001은 숫자로 65이지만 문자로 해석하면 'A'가 된다.

var score = 10 + 20;

위 코드처럼 변수를 할당할 때, 우변에 식이 들어있다면 식이 먼저 평가되어 값 30을 생성한 후에 변수 score에 값을 할당한다.


5.2 리터럴

리터럴literal은 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법notation이다.

간단히 리터럴은 문자(알파벳, 한글, 아라비아 숫자 등) 또는 미리 약속된 기호('', "", [], {}, // 등)로 표기한 코드인 것이다.

이러한 리터럴은 런타임runtime에 평가되고 값이 생성되는 것이다.

리터럴을 통해 아래 표와 같이 다양한 종류의 값을 생성할 수 있다.

리터럴예시
정수 리터럴100
부동소수점 리터럴10.5
2진수 리터럴0b01000001
8진수 리터럴0o101
16진수 리터럴0x41
문자열 리터럴'Hello'
불리안 리터럴true
null 리터럴null
undefined 리터럴undefined
객체 리터럴{id: 1, name: 'TAEHWAN'}
배열 리터럴[1, 2, 3]
함수 리터럴function(){}
정규 표현식 리터럴/[A - Z]+/g

5.3 표현식

표현식expression은 값으로 평가될 수 있는 문statement이다.

즉, 표현식이 평가되면 새로운 값을 생성하거나 기존 값을 참조한다.

5.2의 리터럴 역시 값으로 평가되기 때문에 표현식이라 할 수 있다.

var score = 10 + 20;
score;

위 코드에서 첫 줄은 값을 생성하고 둘째 줄은 변수 식별자를 참조하므로 모두 표현식이다.

'hello'
30
sum
person.name
10 + 20
sum !== 25
square()
person.getName()

위 코드에서도 모두 형태는 다르지만 값으로 평가될 수 있는 문이므로 모두 표현식이다.

표현식은 값으로 평가되는데, 이 때, 해당 표현식과 그 표현식이 평가된 값은 동차equivalent라 한다.

동차인 경우에는 표현식을 값처럼 사용할 수 있어, 값이 위치하는 자리에 표현식이 위치할 수도 있다.


5.4 문

⚠️ 문과 표현식을 구별할 것!

문statement은 프로그램을 구성하는 기본 단위이자 최소 실행 단위이다.

프로그램: 문의 집합


프로그래밍: 문을 작성하고 순서에 맞게 나열하는 것.

프로그램의 기본 단위인 문은 다시 여러 토큰으로 나눌 수 있다. 토큰token이란 문법적인 의미를 가지며, 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소이다.

'SyntaxError; Unexpected token ~~~'와 같은 에러문에서 언급하는 토큰이 문의 구성 단위인 토큰이다.

var sum = 10 + 20;

위 코드는 하나의 문이지만, var, sum, =, 1, +, 2, ; 7개의 토큰으로 구성되어 있다.

이처럼 키워드, 식별자, 연산자, 리터럴, 세미콜론 등의 특수 기호는 문법적인 의미를 가지고, 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소를 모두 토큰이라 한다.

문은 명령문이라고도 부른다. 즉, 컴퓨테 내리는 명령인 것이다.

문은 선언문, 할당문, 조건문, 반복문 등으로 구분이 되며,

  • 변수 선언문은 변수를 선언한다.
  • 할당문은 값이 할당된다.
  • 조건문은 지정한 조건에 따라 실행할 코드 블록을 결정한다.
  • 반복문은 특정 코드 블록이 반복적으로 실행된다.

    와 같은 명령이 실행된다.

5.6 표현식인 문과 표현식이 아닌 문

표현식과 문의 차이점은 표현식이 문의 일부일 수도 있고 그 자체로 문이 될 수도 있다는 점에 있다.

var x;
x = 1 + 2;

위 코드에서 첫째 줄은 변수 선언문으로 값으로 평가될 수 없어 표현식이 아니다.

반면, 둘째 줄은 1, 2, 1 + 2, x = 1 + 2 모두 표현식으로 표현식 자체가 완전한 문이 되기도 한다.

따라서, 문은

  • 표현식인 문: 값으로 평가될 수 있는 문.

    ex) 할당문

  • 표현식이 아닌 문: 값으로 평가될 수 없는 문.

    ex) 변수 선언문

    으로 구분할 수 있다.

문이 값으로 평가되냐 안 되냐로 표현식과 구별할 수 있는 점을 활용하여 변수에 할당해 보는 것으로도 한 번 더 구별할 수 있다.

var foo = var x;  //SyntaxError: Unexpected token var

위 코드에서 변수 선언문 'var x'은 표현식이 아닌 문이므로, 값으로 평가 될 수 없다.

따라서, 변수 선언문이 값처럼 사용할 수 없다.

var x;
x = 100;

반면 위 코드에서 x = 100은 그 자체가 표현식이므로, 이 할당문은 아래 코드에서처럼 값처럼 사용할 수 있다.

var foo = x = 100;
console.log(foo);

위 코드에서 할당문 x = 100을 값처럼 변수에 할당했고, 이 할당문은 표현식인 문으로 할당한 값으로 평가된다.

즉, x = 100은 x 변수에 할당한 값 100으로 평가되고, foo 변수에는 다시 x 변수를 할당하여 100이 할당된다.

완료 값? 크롬 개발자 도구에서 표현식이 아닌 문을 실행하면 undefined를 출력하는데, 이 값을 완료 값이라 한다.

ex) var foo = 10; => 출력: undefined
ex) 100 + foo; => 출력: 110




👀 되돌아보기

  • 표현식값으로 평가될 수 있는 명령문으로,
    표현식이 평가되면 새로운 값이 생성되거나, 값을 참조하게 된다.

  • 문(또는 명령문)은 프로그램을 구성하는 기본 단위이자, 최소 실행 단위로, 선언문, 할당문, 조건문, 반복문 등이 있다.

  • 표현식인 명령문과 표현식이 아닌 명령문 구분하기!

    • 명령문은 표현식일 수도, 아닐 수도 있다. 즉, 모든 명령문이 표현식은 아니다.
    • 표현식인 명령문은 값으로 평가될 수 있는 문이므로, 값처럼 사용할 수도 있다.
    • 표현식이 아닌 문은 값으로 평가될 수 없으므로, 값처럼 사용 시 에러가 발생한다.

내용 출처: [위키북스] 모던 자바스크립트 Deep Dive

profile
이로운 개발자

0개의 댓글