5.1 값
값은 식(표현식)이 평가되어 생성된 결과를 말한다.
평가란 식을 해성해서 값을 생성하거나 참조하는 것
// 10 + 20 은 평가되어 숫자 값 30을 생성한다.
10 + 20 // 30
모든 값은 데이터 타입을 가지며, 메모리에 2진수(비트)의 나열로 저장된다.
메모리에 저장된 값은 데이터 타입에 따라 다르게 해석될 수 있다.
변수는 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름 이다.
변수에 할당되는 것은 값이다.
// 변수에는 10 + 20 이 평가되어 생성된 숫자 값 30이 할당된다.
var sum = 10 + 20;
10 + 20 은 할당 이전에 평가되어 값을 생성해야 한다.
5.2 리터럴
리터럴은 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법을 말한다.
// 숫자 리터릴 3
3
위의 코드를 보면, 아라비아 숫자를 사용해 숫자 리터럴 3을 코드로 작성하면 자바스크립트 엔진은 평가 과정에서 숫자 값 3을 생성한다.
리터럴은 런타임에 사람이 이해할 수 있는 문자(아라비아 숫자, 알파벳, 숫자, 한글 등)또는 약속된 기호("", [] 등)를 통해 값을 생성하는 표기법이다.
5.3 표현식
표현식은 값으로 평가될 수 있는 문이다.
표현식이 평가되면 새로운 값을 생성하거나 기존 값을 참조한다.
사실 리터럴은 값으로 평가 되기에 리터럴도 표현식이다.
var score = 100;
var score2 = 50 + 30;
console.log(score) // 100;
console.log(score2) // 80;
변수 식별자를 참조하면 변수 값으로 평가된다.
식별자 참조는 값을 생성하지는 않지만 값으로 평가되므로 표현식이다.
표현식은 리터럴, 식별자, 연산자, 함수 호출 등의 조합으로 이뤄질 수 있다.
즉, 값으로 평가될 수 있는 문은 모두 표현식이다.
// 리터럴 표현식
10
"Hello"
// 식별자 표현식(선언이 이미 있는다는 전재)
sum
person.name
arr[1]
// 연산자 표현식
10 + 20
sum = 10
sum !== 0
// 함수/메서드 호출 표현식(선언이 이미 있다는 전재)
square()
person.getName()
표현식이 값으로 편가될 때 표현식과 표현식이 평가된 값은 동등한 관계(동치)이다.
표현식은 값처럼 사용할 수 있기 때문에 문법적으로 값이 위치할 수 있는 자리에 표현식도 위치할 수 있다.
var x = 1 + 2;
// 식별자 표현식 x는 3으로 평가된다.
x + 3; // 6
5.4 문
문은 프로그램을 구성하는 기본 단위이자 최소 실행 단위다.
문의 집합으로 이뤄진것이 프로그램이고, 문을 작성하고 순서에 맞게 나열하는 것이 프로그래밍이다.
토큰이란 문법적인 의미를 갖고 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소를 의미한다.
이 토큰이 여러개로 구성된 것이 문이다.
토큰의 예는 키우드, 식별자, 연산자, 리터럴, 세미콜론이나 마침표 등이 있다.
모두 의미를 갖고 문법적으로 더 이상 나눌 수 없다.
문을 명령문이라고 하는데, 컴퓨터에게 내리는 명령으로, 명령을 하면 명령이 실행되고 무언가가 일어난다!
문은 선언문, 할당문, 조건문, 반복문 등으로 구분할 수 있다.
// 변수 선언문
var x;
// 할당문
x = 5;
// 함수 선언문
function foo() {}
// 조건문
if(x > 1){ console.log('dd'); }
// 반복문
for(let i=0; i<3; i++){ console.log(i); }
5.5 세미콜론과 세미콜론 자동 삽입 기능
세미콜론은 문의 종료를 나타내며 자바스크립트 엔진은 세미콜론으로 문의 종료 위치를 파악하고 문을 실행한다.
이렇게 보면 세미콜론이 모든 문에 다 필요할 거 같지만, 0개 이상의 문을 중괄호로 묶은 코드블럭 뒤에는 붙지 않는다. 이는 언제나 문의 종료를 의미하는 자체 종결성을 갖기 때문이다.
또한 문의 종료를 알린다던 세미콜론은 옵션으로 생략이 가능하다.
이는 자바스크립트 엔진의 세미콜론 자동 삽입 기능(ASI)이 암국적으로 수행되기 때문이다.
하지만, 때때로 의도치 않은 에러가 발생할 수 있으므로 코드 작성자가 항상 원하는 종료 시점에 세미콜론을 작성하는 것이 심적으로 좋을 것 같다.
5.6 표현식인 문과 표현식이 아닌 문
표현식은 문의 일부일 수도 있고 그 자체로 문이 될 수도 있다.
문에는 표현식인 문과 표현식이 아닌 문이 있다.
표현식인 문은 값으로 평가될 수 있지만, 표현식이 아닌 문은 값으로 평가될 수 없다.
쉽게 구분하는 방법은 변수에 할당해보고 되면 표현식인 문, 안되면 표현식이 아닌 문이다.
// 표현식이 아닌 문은 값처럼 사용할 수 없다.
var foo = var x; // SyntaxError: Unexpected token var
// 변수 선언문은 표현식이 아닌 문이다.
var x;
// 할당문은 자체가 표현식이지만
// 완전한 문이기도 하기에 할당문은 표현식인 문이다.
x = 100;
// 표현식인 문은 값처럼 사용할 수 있다.
var bar = y = 100;
console.log(bar); // 100
'JavaScript > 모던 자바스크립트 Deep Dive' 카테고리의 다른 글
7. 연산자 (0) | 2023.11.02 |
---|---|
6. 데이터 타입 (0) | 2023.10.27 |
4. 변수 (0) | 2023.10.24 |
2. 자바스크립트란? (0) | 2023.10.19 |
1. 프로그래밍 (0) | 2023.10.17 |