티스토리 뷰
04장 변수
변수는 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름
값의 위치를 가르키는 상징적인 이름
변수 선언의 실행 시점과 변수 호이스팅
변수 선언이 소스코드가 한 줄씩 순차적으로 실행되는 시점, 즉 런타임이 아니라 그 이전 단계에서 먼저 실행됨.
변수 선언문이 코드의 선두로 끌어올려진 것 처럼 동작하는 자바스크립트 고유의 특장을 변수 호이스팅이라 한다.
값의 할당
변수 선언과 값의 할당을 2개의 문으로 나누어 표현한 코드와 변수 선언과 값의 할당을 하나의 문으로 단축 표현한 코드는 정확히 동일하게 동작함.
단 변수 선언은 런타임 이전에, 값의 할당은 런타임에 실행됨
상수
값을 재할당할 수 없어서 변수에 저장된 값을 변경할 수 없다면 변수가 아니라 상수라 한다.
상수란, 한번 정해지면 변하지 않는 갓이다. 상수는 단 한 번만 할당할 수 있는 변수다.
(const 키워드를 사용해 선언한 변수는 재할당이 금지됨, const 키워드는 한번만 할당할 수 있는 변수를 선언함 = 상수를 표할 할 수 있으나 반드시 상수만을 위해 사용하진 않음에 유의)
*가비지콜렉터는 애플리케이션이 할당한 메모리공간을 주기적으로 검사하여 더이상 사용하지 않는 메모리를 해제하는 기능을 말함
식별자는 어떤 값을 구별해서 식별해낼 수 있는 고유한 이름을 말함
- 식별자는 특수문자를 제외한 문자, 숫자, 언더바, 달러기호를 포함할 수 있으나 숫자로 시작하는 것은 허용하지 않음
- 예약어는 식별자로 사용할 수 없다.
* 자바스크립트는 대소문자를 구별하므로 대소문자가 다르면 스펠링이 같아도 다른 변수다.
일반적으로 변수나 함수에는 카멜케이스를(소대소대)
생성자 함수, 클래스 이름에는 파스칼케이스를(대소대소)
사용함
05장 표현식과 문
값은 표현식이 평가되어 생성된 결과를 말함. 모든 값은 데이터 타입을 가짐
리터럴은 사람이 이해할 수 있는 문자 또는 약속된 기호를 통해 값을 생성하는 표기법
표현식은 값으로 평가될수 있는 문, 표현식이 평가되면 새로운 값을 생성하거나 기존 값을 참조함
표현식은 값으로 사용될 수 있다.
문은 프로그램을 구성하는 기본 단위이자 최소 실행단위다. 문의 집합으로 이뤄진 것이 바로 프로그램이며, 문을 작성하고 순서에 맞게 나열하는 것이 프로그래밍이다. 문을 명령문이라고도 부른다.
문은 여러 토큰으로 구성됨, 토큰이란 문법적인 의미를 가지며 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소를 의미함
ex) 키워드, 식별자, 연산자, 리터럴, 세미콜론, 마침표
문을 끝낼때는 세미콜론을 붙여야 하나, 0개 이상의 문을 중괄호로 묶은 코드 블록 ({...}) 뒤에는 세미콜론을 붙이지 않음
ex if 문, for문 등등 => 이러한 코드블록은 언제나 자체종결성을 갖기 때문임
표현식은 문의 일부일 수도 있고, 그 자체로 문이 될 수도 있음.
표현식 o 문 = 값으로 평가될 수 있는 문, 표현식 x 문 = 값으로 평가될 수 없는 문
표현식인 문과 표현식이 아닌 문을 구별하는 가장 간단하고 명료한 방법은 변수에 할당하는 것
06 데이터 타입
데이터 타입이란 ? 값의 종류
자바스크립트는 7개의 데이터 타입을 제공함
원시타입 - 숫자 타입/ 문자열 타입/ 불리언 타임/ undefined 타입/null 타입/ 심벌 타입(es6에서 추가됨)
객체타입 - 객체 / 함수 / 배열 등
숫자타입 : 실수 정수 상관없이 모두 실수 형태, 따라서 정수형으로 계산해도 실수형 값이 나오는 경우가 발생할 수 있음
문자열타입 : 작은따옴표, 큰따옴표 또는 백틱으로 텍스트를 감싸며 가장 일반적인건 작은 따옴표를 사용하는 경우
자바는 문자열을 객체로 표현하지만 자바스크립트의 문자열은 원시타입이며 변경 불가한 값이다!
++ 템플릿 리터럴 : ES6부터 등장한 새로운 문자열 표기법으로 '멀티라인 문자열' '표현식 삽입', '태그드 템플릿' 등 편리한 문자열 기능을 제공함. 런타임에 일반 문자열로 변환되어 처리됨 백틱을 사용해 표현함
-템플릿 리터럴 내에서는 이스케이프 시퀀스를 사용하지 않고도 줄바꿈이 허용되며, 공백도 있는 그대로 적용됨
-``안에서는 표현식 삽입(${표현식})를 통하여 표현식을 불러올 수 있으며, 표현식의 값이 문자열이 아니더라도 문자열로 강제타입 변환됨 console.log(`1+2 = ${1+2}`); // 1+2=3 백틱이 아닌 일반 문자열이였으면 1+2=${1+2} 그대로 출력
불리언 타입 : t/f
null 타입 : 변수에 null을 할당하는 것은 이전에 참조하던 값을 더 이상 참조하지 않겠다는 의미
심벌타입 : 다른 값과 중복되지 않는 유일무이한 값,
주로 이름이 출동할 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용함,
다른 원시값은 리터럴을 통해 생성하지만 심벌은 Symbol 함수를 호출해 생성하며 심벌값은 외부에 노출되지 않음
++데이터 타입이 필요한 이유
- 값을 저장할 메모리 공간의 크기를 결정하기 위해
- 값을 참조할 때 한번에 읽어들여야할 메모리 공간의 크기를 결정하기 위해
- 메모리에서 읽어들인 2진수를 어떻게 해석할지 결정하기 위해
정적타입언어는 변수를 선언할 때 변수에 할당할 수 있는 값의 종류를 사전에 선언해야함 (명시적 타입 선언)
컴파일 시점에 타입체크를 수행함
<=> 자바스크립트는 이와 반대인 동적타입 언어
타입 추론 : 변수는 선언이 아닌 할당에 의해 타입이 결정
동적 타이핑 : 재할당에 의해 변수의 타입은 언제든지 동적으로 벼남
자바스크립트 사용 시 유연성은 높으나 신뢰성이 떨어지기 때문에 주의해야할 점이 있음
- 변수는 꼭 필요한 경우에 제한적으로 사용할 것, 재할당에 의해 언제든지 변경될 수 있다. 변수의 개수와 오류 발생 확률은 비례함
- 변수 유효 범위(스코프)는 최대한 좁게 만들어야 함
- 전역 변수는 최대한 사용하지 않는다.
- 변수보다는 상수를 사용해 값의 변경을 억제함
07장 연산자
연산자는 하나 이상의 표현식을 대상으로 산술, 할당, 비교, 논리, 타입, 지수 연산 등을 수행해 하나의 값을 만듦.
연산의 대상은 피연산자
산술 연산자는 피연산자를 대상으로 수학적 계산을 수행해 새로운 숫자 값을 만듦
피연산자 개수에 따라 이항 산술 연산자, 단항 산술 연산자로 구분
암묵적 타입 변환 / 강제 타입 변환 1 + true = 2 // 자바스크립트 엔진이 true를 암묵적으로 1로 변환시킴
비교연산자
동등 비교 연산자는 느슨한 비교를 (==) : 각 항의 값이 같음 => 암묵적 타입 변환을 하고 값을 비교함
일치 비교 연산자는 엄격한 비교를 함 (===) : 각 항의 값과 타입이 같음
따라서 정확한 값 비교를 위해서는 일치비교연산자를 사용해야 하는데
단, NaN === NaN만이 유일하게 false가 나오므로 isNaN을 통해 비교해야함
또한 -0 === +0 true로 반환함
삼항 조건 연산자
조건식의 평과 결과에 따라 반환할 값을 결정함
조건식 ? 조건식이 true 일떄 반환할 값 : 조건식이 false일때 반환할 값
var result = score >= 60 ? 'pass' : 'fail';
**if else 문과 유사하나, if else 문은 값으로 사용불가, 삼항 조건 표현식은 값으로 사용 가능하다는 차이!
논리 연산자
- 논리 부정 연산자(!)는 언제나 불리언 값을 반환함
- 논리 합 (||) 또는 논리 곱(&&) 연산자는 피연산자 중 어느 한쪽으로 평가됨
쉼표 연산자는 왼쪽 피연산자부터 차례대로 피연산자를 평가하고, 이가 끝나면 마지막 피연산자의 평가결과를 반환함
그룹 연산자는 소괄호로 피연산자를 감쌈, 연산자 우선순위가 가장 높음
typeof 연산자는 피연사자의 데이터 타입을 문자열로 변환함 그러나 7개 데이터 타입과 정확히 일치하지 않는다.
특히 null을 반환하지 않으므로, null을 확인하고 싶을때는 연산자 === null을 사용할 것
지수 연산자는 좌항의 피연산자를 밑으로, 우하의 피연산자를 지수로 거듭 제곱하여 숫자 값을 반환함(**)
Math.pow(2,2) = 2**2
지수 연산자는 이항 연산자 중에서 우선 순위가 가장 높음
* 대부분 연산자는 다른 코드에 영향을 주지 않으나
할당 연산자(=):값이 변함, 증감 연산자( ++, --):피연산자 값을 변경, delete: 객체 프로퍼티 삭제함
=> 연산자는 영향을 줌
연산자 우선순위는 외우기 어려우므로 가장 순위가 높은 ()을 기억해서 명시적으로 사용할 것
연산자 결합 순서
좌항-> 우항 : 사칙연산, 비교, .,[],(),??,?.,in,instanceof
우항->좌항 : ++, --, 할당연산자(=, +=, -= ...), !x, +x, -x, ++x, --x, typeof, delete, 삼항연산자, **