오늘 공부한 내용.
오늘 읽은 범위 : 5장 표현식과 문 (50p ~ 58p)
날짜 : 2023.10.30
목차
1. 값
2. 리터럴
3. 표현식
4. 문
5. 표현식인 문과 표현식이 아닌 문
식(표현식)이 평가 되어 생성된 결과
// 10 + 20은 평가되어 숫자 값 30을 생성
10 + 20; // 30
모든 값은 데이터 타입을 가지며, 메모리에 2진수 즉, 비트의 나열로 저장
메모리에 저장된 값은 데이터 타입에 따라 다르게 해석
- 메모리에 저장된 값 0100 0001을 해석해보자.
- 숫자 : 65
- 문자 : 'A'
변수 : 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름
// 변수에 10 + 20이 평가되어 생성된 30이 할당
var sum = 10 + 20;
sum
이라는 변수에 할당되는 것은 10 + 20이 아니라 10 + 20이 평가된 결과인 숫자 값 30sum
이 기억하는 메모리 공간에 저장된 것은 10 + 20이 아니라 값 30사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법
// 숫자 리터럴 3
3
3
은 단순한 아라비아 숫자가 아니라 숫자 리터럴리터럴은 사람이 이해할 수 있는 문자 (아라비아 숫자, 알파벳, 한글 등) 또는 미리 약속된 기호 ('', "", ., [], {}, // 등) 로 표기한 코드
자바스크립트 엔진은 코드가 실행되는 시점인 런타임에 리터럴을 평가해 값을 생성.
리터럴 | 예시 | 비고 |
---|---|---|
정수 리터럴 | 100 | |
부동소수점 리터럴 | 10.5 | |
2진수 리터럴 | 0b01000001 | 0b로 시작 |
8진수 리터럴 | 0o101 | ES6에서 도입. 0o로 시작 |
16진수 리터럴 | 0x41 | ES6에서 도입. 0x로 시작 |
문자열 리터럴 | 'Hello' "World" | |
불리언 리터럴 | true false | |
null 리터럴 | null | |
undefined 리터럴 | undefined | |
객체 리터럴 | { name : 'Lee', address : 'Seoul'} | |
배열 리터럴 | [ 1,2, 3] | |
함수 리터럴 | function () {} | |
정규 표현식 리터럴 | /[A-Z]+/g |
값으로 평가될 수 있는 문
그러면 리터럴은 값으로 평가 될까?
리터럴은 값으로 평가된다.
따라서, 리터럴도 표현식이다.
var score = 100; // 리터럴 100은 자바스크립트 엔진에 의해 평가되어 값을 생성하므로 리터럴은 그 자체로 '표현식'
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()
표현은 값으로 평가된다
이때, 표현식이 평가된 값은 동등한 관계, 즉 동치이다.
1 + 2 = 3
에서 1 + 2
느 3
과 동치다.1 + 2
는 3
과 같다고 할 수 있다.프로그램을 구성하는 기본 단위이자 최소 실행 단위.
문은 여러 토큰으로 구성된다.
var sum = 1 + 2;
// 전체적으로 'var sum = 1 + 2' -> 문
// 개별적으로 'var', 'sum', '=', '1', '+', '2' -> 토큰
문을 명령문이라고도 부른다.
즉, 문은 컴퓨터에 내리는 명령.
// 변수 선언문
var x; // 변수가 선언.
// 할당문
x = 5; // 값이 할당.
// 함수 선언문
function foo () {} // 함수가 선언.
// 조건문
if (x > 1) { consol.log(x); } // 지정한 조건에 따라 실행할 코드 블록 ({...})이 결정되어 실행.
// 반복문
for (var i = 0; i < 2; i++) { consol.log(i); } //특정 코드 블록이 반복 실행.
표현식은 문의 일부일 수도 있고 그 자체로 문이 될 수도 있다.
var x; // 변수 선언문은 값으로 평가될 수 없으므로 표현식이 아니다.
x = 1 + 2; // x = 1 + 2는 표현식이면서 완전한 문이기도 하다.
// '1', '2', '1 + 2', 'x = 1 + 2' 모두 표현식이다.
표현식과 문 너무 비슷한데..?
이처럼 표현식과 문은 비슷해서 구별하기 어렵다고 느낄 수 있다.
문에는
표현식인 문
과표현식이 아닌 문
이 있다.
- 표현식인 문 : 값으로 평가될 수 있는 문
- 표현식이 아닌 문 : 값으로 평가될 수 없는 문
구별하는 가장 간단하고 명료한 방법은
변수에 할당해 보는 것
이다.
// 표현식이 아닌 문은 값처럼 사용힐 수 없다.
var foo = var x; // SyntaxError: Unexpected token 'var'
var x; // 변수 선언문은 표현식이 아닌 문이다.
x = 100; // 할당문은 그 자체가 표현식이지만 완전한 문이기도 하다. 즉, 할당문은 표현식인 문이다.