5.1 값
값(value)은 식(표현식 expression)이 평가(evaluate)되어 생성된 결과를 말함.
평가란 식을 해석해서 값을 생성하거나 참조하는 것을 의미함.
10 + 20; // 30
// 10 + 20은 평가되어 숫자 값 30을 생성함.
모든 값은 데이터 타입을 가지며, 메모리에 2진수(비트의 나열)로 저장된다.
메모리에 저장된 값은 데이터 타입에 따라 다르게 해석될 수 있음.
ex) 메모리에 0100 0001을 숫자로 해석하면 65지만 문자로 해석하면 A임.
var sum = 10 + 20;
// sum 변수에는 10 + 20이 평가되어 생성된 숫자 값 30이 할당됨
-
위 예제의 sum 변수에 할당되는 것은 10 + 20이 아니라 해당식이 평가된 결과인 30임.
-
즉, 변수 sum이 기억이하는 메모리 공간에 저장된 것은 30임.
-
따라서 10 + 20은 할당 이전에 평가되어 값을 생성해야 함.
-
위 예제의 동작 과정
sum 변수 선언 -> undefined로 초기화 되어 메모리에 할당(호이스팅) -> 10 + 20 평가(런타임) -> sum에 평가값이 30을 할당
5.2 리터럴
리터럴은 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법을 말한다.
-
리터럴은 사람이 이해할 수 있는 문자(아라비아 숫자, 알파벳, 한글 등) 또는 미리 약속된 기호
('', "", ., [], {}, // 등)
로 표기한 코드다.
즉, 값을 생성하는 모든 코드가 리터럴이다. 라고 생각하면 될듯 -
js엔진은 코드가 실행되는 시점인 런타임에 리터럴을 평가해 값을 생성한다. 즉, 리터럴은 값을 생성하기 위해 미리 약속한 표기법이라고 할 수 있음.
-
리터럴을 사용하면 다음과 같이 다양한 종류의 값을 생성할 수 있음. 타입과 비슷하나 분류가 좀 다름.
리터럴 | 예시 | 비고 |
---|---|---|
정수 리터럴 | 100 | |
부동소수점 리터럴 | 10.5 | |
2진수 리터럴 | 0b01000001 | 0b로 시작 |
8진수 리터럴 | 0o101 | ES6에서 도입. 0o로 시작 |
16진수 리터럴 | 0x41 | ES6에서 도입. 0x로 시작 |
문자열 리터럴 | ‘Hello’ “World” |
|
불리언 리터럴 | true false |
|
null 리터럴 | null | |
undefined 리터럴 | undefined | |
객체 리터럴 | ||
배열 리터럴 | [ 1, 2, 3 ] | |
함수 리터럴 | function() {} | |
정규 표현식 리터럴 | /[A-Z]+/g |
5.3 표현식
표현식은 값으로 평가될 수 있는 문임.
즉, 표현식이 평가되면 새로운 값을 생성하거나 기존값을 참조함.
var score = 100;
위 예제의 100은 리터럴임. 리터럴 100은 js엔진에 의해 평가되어 값을 생성하므로 리터럴은 그 자체로 표현식임.
var score = 50 + 50;
50 + 50은 리터럴과 연산자로 이루어짐. 하지만, 50 + 50도 평가되어 숫자 값 100을 생성하므로 표현식임
score; // -> 100
변수 식별자를 참조하면 변수값으로 평가됨. 식별자 참조는 값을 생성하지는 않지만 값으로 평가되므로 표현식임.
표현식은 리터럴, 식별자(변수, 함수 등의 이름), 연산자, 함수 호출 등의 조합으로 이뤄질 수 있음.
다양한 표현식이 있지만 값으로 평가된다는 점에서 모두 동일.
값으로 평가될 수 있는 문은 모두 표현식임.
5.4 문
-
문은 프로그램을 구성하는 기본 단위이자 최소 실행 단위임.
-
문은 여러 토큰으로 구성됨
-
토큰이란 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소를 말함.
ex) 키워드, 식별자, 연산자, 리터럴, 세미콜론, 마침표 등 -
문을 명령문이라고도 부름.
-
문은 선언문, 할당문, 조건문, 반복문 등으로 구분할 수 있음.
// 변수 선언문
var x;
// 할당문
x = 5;
// 함수 선언문
function foo() {}
// 조건문
if(x > 1) { console.log(x); }
// 반복문
for(var i = 0;i < 2;i++) { console.log(i); }
5.5 세미콜론과 세미콜론 자동 삽입 기능
- 세미 콜론은 문의 종료를 나타내고 생략이 가능하다.
- 하지만 왠만하면 명시적으로 붙이자.
5.6 표현식인 문과 표현식이 아닌 문
- 표현식은 문의 일부일 수도 있고 그 자체로 문이 될 수도 있다.
var x; // 변수 선언문은 값으로 평가될 수 없으므로 표현식이 아님
x = 1 + 2; // 표현식이면서 완전한 문이기도 함.
- 표현식인 문과 표현식이 아닌 문을 구별하는 가장 간단하고 명확한 방법은 변수에 할당해 보는 것.
- 표현식인 문은 값으로 평가되므로 변수에 할당할 수 있음. 하지만 표현식이 아닌 문은 값으로 평가할 수 없으므로 변수에 할당하면 에러가 발생함.
완료값
- 크롬 개발자 도구에서 표현식이 아닌 문을 실행하면 언제나 undefined를 출력하는데 이를 완료값이라 함.
- 완료값은 표현식의 평가 결과가 아님. 따라서 다른 값과 같이 변수에 할당할 수 없고 참조할 수 없음
var foo = 10; // undefined
if(true) {} // undefined
- 크롬 개발자 도구에서 표현식인 문을 실행하면 언제나 평가된 값을 반환함.
var num = 10; // undefined
100+num; // 110
num = 100; // 100
'공부공부 > JS 딥다이브' 카테고리의 다른 글
[js 딥다이브] 09장 타입변환과 단축평가 (0) | 2023.10.16 |
---|---|
[js 딥다이브] 08장 제어문 (0) | 2023.10.16 |
[js 딥다이브] 07장 연산자 (0) | 2023.10.16 |
[js 딥다이브] 06장 데이터 타입 (0) | 2023.10.16 |
[js 딥다이브] 04장 변수 (0) | 2023.10.16 |