rustandbone Developer

모던 JS deep dive 2회차 챕터 5~8

모던 JS deep dive 2회차

05. 표현식과 문

5.1 값

값(value)은 식(표현식 expression)이 평가(evaluate)되어 생성된 결과

평가 : 식을 해석해서 값을 생성하고 참조하는 것

모든 값은 데이터 타입을 가지며, 메모리에 2진수(비트의 나열)로 저장됨

5.2 리터럴

리터럴(literal) : 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법(notation)

5.3 표현식

표현식(expression)은 값으로 평가될 수 있는 문(statement)
즉, 표현식이 평가되면 새로운 값을 생성하거나 기존값을 참조

값으로 평가될 수 있는 문은 모두 표현식

표현식은 값으로 평가됨
표현식과 표현식이 평가된 값을 동등한 관계, 즉 동치임.

5.4 문

문(statement), 표현식(expression)

문은 프로그램을 구성하는 기본 단위이자 최소 실행 단위. 문의 집합으로 이뤄진 것이 프로그램. 문을 작성하고 순서에 맞게 나열하는 것이 프로그래밍.

문은 여러 토큰으로 구성됨

토큰 : 문법적인 의미를 가지며, 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소를 의미(키워드, 식별자, 연산자, 리터럴, 세미콜론, 마침표 등)

문은 명령문이라고도 함. 컴퓨터에 내리는 명령.

    • 선언문
    • 할당문
    • 조건문
    • 반복문 등

5.5 세미콜론과 세미콜론 자동 삽입 기능

세미콜론은 문의 종료를 나타냄

자바스크립트 엔진은 문의 끝이라고 예측되는 지점에 세미콜론을 자동으로 붙여주는 세미콜론 자동 삽입 기능(ASI - automatic semicolon insertion)이 암묵적으로 수행됨

5.6 표현식인 문과 표현식이 아닌 문

표현식인 문과 표현식이 아닌 문을 구별하는 가장 간단하고 명료한 방법은 변수에 할당해 보는 것.

표현식인 문은 값으로 평가되므로 변수 할당 가능
표현식이 아닌 문은 값으로 평가될 수 없으므로 변수에 할당하면 에러 발생

06. 데이터 타입

6.7 심벌 타입

심벌은 ES6에서 추가된 7번째 타입. 변경 불가능한 원시 타입의 값. 다른 값과 중복되지 않는 유일무이한 값. 주로 이름이 충돌할 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용

심벌 이외의 원시 값은 리터럴을 통해 생성하지만,
심벌은 Symbol 함수를 호출해 생성
이때 생성된 심벌 값은 외부에 노출되지 않으며, 다른 값과 절대 중복되지 않는 유일무이한 값임.

6.8 객체 타입

자바사크립트는 객체 기반 언어. 자바스크립트를 이루고 있는 거의 모든 것이 객체.

6.10 동적 타이핑

정적 타입 언어는 변수의 타입을 변경할 수 없으며, 변수에 선언한 타입에 맞는 값만 할당할 수 있음.
컴파이 시점에 타입 체크를 수행하고 통과하지 못하면 에러 발생으로 프로그램 실행을 막음
예) C, C++, 자바, 코틀린, 고, 하스켈, 러스트 스칼라 등

자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정(타입 추론type inference)된음. 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있음
=> 동적 타이핑(dynamic typing)
자바스크립트는 동적 타입(dynamic/weak type) 언어
예) 자바스크립트, 파이썬, PHP, 루비, 리스트, 펄

07. 연산자

7.1.3 문자열 연결 연산자

+ 연산자는 피연산자 중 하나 이상이 문자열인 경우 문자열 연결 연산자로 동작. 그 외의 경우는 산술 연산자로 동작.

자바스크립트 엔진에 의해 암묵적으로 타입이 자동 변환되기도 함
=> 암묵적 타입 변환(implicit coercion) 또는 타입 강제 변환(type coercion)

7.3.1 동등/일치 비교 연산자

동등 비교(==) 연산자는 좌항과 우항의 피연산자를 비교할 때 먼저 암묵적 타입 변환을 통해 타입을 일치시킨 후 같은 값인지 비교.

일치 비교(===) 연산자는 좌항과 우항의 피연산자가 타입도 같고 값도 같은 경우에 한하여 true를 반환함. 암묵적 타입 변환을 하지 않고 값을 비교.

NaN === NaN; //false NaN은 자신과 일치하지 않는 유일한 값. NaN인지 조사하면 isNaN 함수 사용

0 === -0; //true 양의 0과 음의 0 비교하면 true 반환

Object.is 메서드는 예측 가능한 정확한 비교 결과 반환

Object.is(-0, +0); //false
Object.is(NaN, NaN); //true

7.4 삼항 조건 연산자

삼항 조건 연산자(ternary operator) 표현식은 값으로 평가할 수 있는 표현식인 문. 값처럼 다른 표현식의 일부가 될 수 있어 매우 유용함.

08. 제어문

8.1 블록문

블록문(block statement/compound statement)는 0개 이상의 문을 중괄호로 묶은 것으로 코드 블록 또는 블록이라고 부름. 자바스크립트는 블록문을 하나의 실행 단위로 취급. 제어문, 함수 정의할 때 사용하는 것이 일반적

문의 끝에는 세미콜론을 붙이는 것이 일반적이나
블록문은 언제나 문의 종료를 의미하는 자체 종결성을 갖기 때문에 블록문의 끝에는 세미콜론을 붙이지 않음