모던 자바 스크립트 Deep Dive 를 읽고 정리한 글 입니다.
5.1 값
값
- 값 (value) = 표현식(expression)이 평가(evaluate) 되어 생성된 결과
- 모든 값은 데이터 타입을 가지며 메모리에 비트의 나열로 저장
- 메모리에 저장된 값은 데이터 타입에 따라 다르게 해석 가능
- ex) 0100 0001 : 숫자 해석 = 65 / 문자 해석 = A
평가
식을 해석해서 값을 생성하거나 참조하는 것
var sum = 10 + 20;
- 변수는 단 하나의 값만을 할당 받음.
- 변수에는 10 + 20 평가 됌
- 생성된 숫자 값 : 30
- sum의 메모리 공간에 저장된 것은 값인 30
- => 10 + 20 은 할당이전에 평가되어 값을 생성
5.2 리터럴
리터럴
- 사람이 이해할 수 있는 문자 또는 약속된 기호로 표기한 코드
- 리터럴은 평가되어 값을 생성
- 값을 생성하기 위해 미리 약속한 표기법
- 자바스크립트 엔진은 코드가 실행되는 시점인 런타임에 리터럴을 평가해 값을 생성
5.3 표현식
표현식
- 값으로 평가될 수 있는 문
- 표현식이 평가되면 새로운 값을 생성하거나 기존 값을 참조
- 리터럴, 식별자, 연산자, 함수 호출 등의 조합으로 이루어짐
- 값으로 평가될 수 있는 문은 모두 표현식
- 문법적으로 값이 위치할 수 있는 자리는 표현식도 위치 할 수 있음
- => 다른 표현식의 일부가 되어 새로운 값 생성 가능
표현식과 표현식이 평가된 값은 동등한 관계 = 동치 (equivalent)
var score = 50 + 50;
50 + 50 => 리터럴 + 연산자
평가되어 숫자 값 100 생성 => 표현식
score; // 100
변수 식별자를 참조 => 변수 값
식별자 참조는 값을 생성하지 않지만 값으로 평가 => 표현식
// 리터럴 표현식
10
'hello'
// 식별자 표현식 (선언이 이미 존재한다고 가정)
sum
person.name
arr[1]
// 연산자 표현식
10 + 20
sum = 10
sum !== 10
// 함수/메서드 호출 표현식 (선언이 이미 존재한다고 가정)
square()
person.getName()
5.4 문
문 = 명령문
- 프로그램을 구성하는 기본 단위
- 최소 실행 단위
- 토큰이 모여 문을 구성
- 컴퓨터에 내리는 명령
프로그램 : 문의 집합
프로그래밍 : 문을 작성하고 순서에 맞게 나열
// 변수 선언문
var X;
// 할당문
X = 5;
// 함수 선언문
function foo () {}
// 조건문
if (X>1) { console.log(x); }
// 반복문
for (var i = 0; i<2; i++) { sonsole.log(i); }
토큰
문접적 의미로 더 이상 나눌 수 없는 코드의 기본 요소
5.5 세미콜론과 세미콜론 자동 삽입 기능
세미콜론
문의 종료
자바스크립트 엔진은 세미콜론으로 문이 종료한 위치를 파악 후 순차적으로 하나씩 문을 실행
자체 종결성 : 0개 이상의 문을 중괄호로 묶은 코드 블록 뒤에는 사용하지 않음
세미콜론 자동 삽입 기능 (ASI)
자바스크립트 엔진이 소스 코드를 해석할 때 자동으로 세미콜론을 붙임
개발자의 의도와 다를 수 있음
5.6 표현식인 문과 표현식이 아닌 문
표현식은 문의 일부일 수도, 그 자체로 문이 될 수도 있음.
표현식인 문 | 표현식이 아닌 문 |
값으로 평가 가능 | 값으로 평가 불가능 |
=> 변수에 할당 가능 | 변수에 할당 시 에러 |
완료 값
크롬 개발자 도구에서 표현식이 아닌 문을 실행햐면 undefined 출력
표현식의 평가 결과가 아님 => 변수에 할당, 참조 불가
크롬 개발자 도구에서 표현식인 문을 실행하면 평가된 값을 출력