5장 표현식과 문
5-1. 값
- 값(value)은 식(표현식expression)이 평가(evaluate)되어 생성된 결과를 말한다.
- 변수는 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름이라고 했다.
따라서 변수에 할당되는 것은 값이다.
var sum = 10+20;
// 변수에는 10 + 20이 평가되어 생성된 숫자 값 30이 할당된다.
// **10+20++의 값이 아니라 평과된 숫자값 30이다.
5-2. 리터럴
- 리터럴(literal)은 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법(notation)을 말한다.
- JS엔진은 코드가 실행되는 시점인 런타임(runtime)에 리터럴을 평가해 값을 생성한다.
리터럴 | 예시 | 비고 |
---|---|---|
정수 리터럴 | 100 | |
부동소수점 리터럴 | 10.5 | |
2진수 리터럴 | 0b01000010 | 0b로 시작한다 |
8진수 리터럴 | 0o101 | ES6에서 도입, 0o로 시작 |
16진수 리터럴 | 0x41 | ES6에서 도입, 0x로 시작 |
문자열 리터럴 | 'Hello', "World" | |
불리언 리터럴 | true, false | |
null 리터럴 | null | |
undefined 리터럴 | undefinde | |
객체 리터럴 | { name: 'Lee', address: 'Seoul' } | |
배열 리터럴 | [ 1, 2, 3 ] | |
함수 리터럴 | function ( ) { } | |
정규 표현식 리터럴 | /[A-Z]+/g |
5-3. 표현식
- 표현식expression은 값으로 평가될 수 있는 문statement이다. 즉, 표현식이 평가되면 새로운 값을 생성하거나 기존 값을 참조한다.
var score = 50 + 50; //50+50은 리터럴과 연산자로 이뤄져 있다. 50+50도 평가되어 숫자 값 100을 생성하므로 표현식이다.
score; // 100 //식별자 참조는 값을 생성하지는 않지만 값으로 평가되므로 표현식 이다.
즉, 값으로 평가될 수 있는 문은 모두 표현식 이다.
// 리터럴 표현식
10
'Hello'
// 식별자 표현식(선언이 이미 존재한다고 가정)
sum
person ~~~
arr[1]
// 연산자 표현식
10+75
sum = 10
sum !== 10
// 함수/메서드 호출 표현식(선언이 이미 존재한다고 가정)
square()
person.getName()
- 표현식과 표현식이 평가된 값은 동등한 관계, 즉 동치(equivalent)이다.
var x = 1 + 2;
//식별자 표현식 x는 3으로 평가된다.
x + 3; // -> 6 숫자 값으로 평가될 수 있는 표현식이라면 숫자 값 대신 사용 가능
5-4. 문
문(Statement) 은 프로그램을 구성하는 기본 단위이자 최소 실행 단위이다. 또한 명령문이라고도 부른다.
토큰(Token) 이란 문법적인 의미를 가지며, 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소를 의미한다.
Token < Statement < Program
문의 종류
var x; // 변수 선언문
x = 5; //할당문
function foo(){} //함수 선언문
if(x>1){console.log(x);} //조건문
for(var i =0; i<2; i++){console.log(i);} //반복문
5-5. 세미콜론과 세미콜론 자동 삽입 기능
문을 끝날 때는 세미콜론을 붙여야 한다. 그러나 0개 이상의 문을 중괄호로 묶은 코드 블록({...}) 뒤에는 세미콜론을 붙이지 않는다. 이러한 코드 블록에는 문의 종료를 의미하는 자체 종결성(Self closing) 을 갖는다.
문의 끝에 붙이는 세미콜론은 옵션 이다.
자바스크립트 엔진 자체에서 해석하고 문장의 끝에 자동으로 붙여주는 세미콜론 자동 삽입 기능(ASI, automatic semicolon insertion)이 암묵적으로 수행된다.
-> 그러나 때에 따라 개발자가 원하는 위치에서 해석하지 못해 오류가 발생하기도 한다.
5-6. 표현식인 문과 표현식이 아닌 문
- 표현식은 문의 일부일 수도 있고, 그 자체로 문이 될수도 있다.
var x;
// **변수 선언문은 값으로 평가될 수 없으므로 표현식이 아니다.**
// 1, 2, 1+2 는 모두 표현식 이다.
// x = 1 + 2는 표현식이면서 완전한 문이기도 하다.
x = 1 + 2;
표현식인 문과 표현식이 아닌 문을 구별하는 가장 간단하고 명료한 방법은 변수에 할당해 보는 것이다.
var x; // 변수 선언문은 표현식이 아닌 문이다.
x = 100; // 할당문은 그 자체가 표현식이지만 완전한 문이기도 하다. 즉, 할당문은 표현식인 문이다.
var foo = var x; //표현식이 아닌 문은 값처럼 사용할 수 없다.
// SyntaxError: Unexpected token var 오류발생.
// **개발자 도구에서 표현식이 아닌 문을 실행하면 완료값 undefined를 출력한다.**
'JAVA Script > 모던 자바스크립트 Deep Dive' 카테고리의 다른 글
[ 7장 ] 연산자 (0) | 2022.05.02 |
---|---|
[ 6장 ] 데이터 타입 (0) | 2022.04.12 |
[ 4장 ] 변수 (0) | 2022.04.09 |
[ 3장 ] 자바스크립트 개발 환경과 실행 방법 (0) | 2022.04.09 |
[ 2장 ] 자바스크립트란? (0) | 2022.04.09 |
댓글