메모리
- 메모리는 데이터를 저장할 수 있는 메모리 셀의 집합체이다. 메모리 셀 하나의 크기는 1바이트, 메모리에 저장되는 모든 값은 2진수로 저장된다.
변수
- 변수는 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름을 말한다 .
- 값을 재사용하기 위해 저장된 메모리 공간에 상징적인 이름을 붙인 것이 바로 변수다.
변수 선언
- var
- const
- let
- 변수 선언문은 변수 이름을 등록하고 값을 저장할 메모리 공간을 확보함.
자바스크립트 엔진의 변수 선언 단계
- 변수 이름을 등록해서 엔진에 변수의 존재를 알림
- 값을 저장하기 위해 메모리 공간을 확보하고 암무적으로 undefined를 할당해 초기화한다.
실행컨텍스트 ??
변수 선언은 소스코드가 한 줄씩 순차적으로 실행되는 시점, 즉 런타임이 아니라 그 이전 단계에서 먼저 실행되기 때문이다.
변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징을 변수 호이스팅 이라고 한다.
예제 04-10
console.log(score)
score=80;
var score;
console.log(score)
값의 재할당과 상수
- var, let 은 재할당 가능
- const 는 상수 (값을 재할당할 수 없어서 변수에 저장된 값을 변경할 수 없다면 상수)
가비지 콜렉터 (사용하지 않는 메모리 공간을 주기적으로 검사해서 해제함, 시점은 예측 불가능)
p.47 모르는 예약어들??
리터럴
- 리터럴은 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법을 말한다.
표현식
- 표현식은 값으로 평가될 수 있는 문이다. 즉, 표현식이 평가되면 새로운 값을 생성하거나 기존 값을 참조한다.
- 값으로 평가될 수 있는 문은 모두 표현식이다.
문
- 프로그램을 구성하는 기본 단위이자 최소 실행 단위다.
- 여러 토큰으로 구성 -> 토큰은 문법적으로 더 이상 나눌수 없는 코드의 기본 요소이다.
var sum = 1 + 2;
-
var, sum, =, 1, +, 2, ; ->하나씩 다 토큰
-
세미콜론은 문의 종료를 나타내느 것.(나는 습관땜에 세미콜론 없으면 불앙하다..)
표현식인 문과 표현식이 아닌 문은 변수에 할당 해보는 것. 표현식인 문은 값으로 평가되므로 변수에 할당할 수 잇다.
var foo = x = 100;
데이터 타입
원시타입
- 숫자
- 문자열
- 불리언
- undefined
- null
- symbol
객체 타입
숫자
이스케이프 시퀀스 (p63)
- \0 Null
- \b 백스페이스
- \f 폼 피드. 프린터로 출력할 경우 다음 페이지의 시작 지점으로 이동한다?
- \n 개행 다음 행으로
- \r 개행 커서를 처음으로 이동
- \t 탭(수평)
- \v 탭(수직)
- \uXXXX 유니코드
- \' 작은따옴표
- \" 큰따옴표
- \ \ 백슬레시
symbol
- 함수를 통해 호출
- 객체의 유일한 프로퍼티 키를 만들수 있음
- 외부에 노출되지 않는다.
객체
자바스크립트를 이루고 있는 거의 모든 것이 객체다.
정적타입 언어
- 컴파일 시점에 타입 체크를 한다(타입스크립트)
- 자바스크립트는 동적 타입 언어이며 어떠한 데이터 타입의 값이라도 자유롭게 할당할 수 있다.
동적 타이핑
- 자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정 되고 재할당에 의해 언제든지 동적으로 타입은 변경 가능
- 동적 타입언어는 개발자의 예측과는 다른 타입을 만들어낼 수 있다.
- 그렇기 때문에 가독성이 좋은 코드가 좋은 코드
연산자
증감 연산자(++, --)
var x = '1';
+x는?? 문자열을 숫자 타입으로 변환
var x = true ;
+x 또한 불리언을 숫자 타입으로 변환함(값은 1임 신기함)
-x 도 숫자로 변환(0이 됨 신기함)
문자열 연결 연산자
- 쉽게 말해서 (+)연산자는 하나 이상이 문자열인 경우 문자열 연결 연산자로 동작한다.
- 1 + true = 2
- 1 + false = 1
암묵적으로 타입을 강제 변환
할당 연산자
비교 연산자
동등 비교는 암묵적 타입 변환을 통해 타입을 일치시킨 후 값은 값인지 비교한다.
5 == '5' -> true
'0' == false -> true
0 == '' -> true
말이 되냐?? ㅋㅋ
일치비교는 암묵적 타입 변환을 하지 않음 주의할 점이 하나 있음
삼항 조건 연산자
? 뒤에는 참 : 뒤에는 거짓
논리 연산자
NOT은 언제나 불리언 값을 반환함
- !0 -> true
- !"hello" -> false
쉼표연산자, 그룹연산자 (이렇게 말하는 구나~ )
지수연산자
- **
- 2 ** 2 = 4
- 2** 2.5 = 5.65~~~
- Math.pow 랑 같음.
- 지수연산자는 우결합성을 가진다 (우항에서 좌항으로)
- 음수를 거듭제곱의 밑으로 사용하려면 괄호로 묶어야 한다
(-5)** 2
그 외의 연산자
- ?.
- ??
- delete
- new
- instanceof
- in
연산자 우선수위
- 여러 개의 연산자로 이뤄진 문이 실행될 때 연산자가 실행되는 순서
- 외우기가 어렵고 우선 순위가 젤 높은 그룹 연산자를 잘 활용하자.
- 연산자 결합 순서가 있는데 좌항, 우항 외우기가 어렵고 그때 그때 참고해서 쓰자
제어문
- 조건에 따라 코드 블록을 실행하거나 반복 실행할 때 사용한다.
블록문
- 블록문의 끝에는 세미콜론을 붙이지 않는다는 것에 주의하기 바란다.
switch문
switch(표현식)
case 표현식 1 :
switch
break
let a = 2 + 2;
switch (a) {
case 3:
alert( '비교하려는 값보다 작습니다.' );
break;
case 4:
alert( '비교하려는 값과 일치합니다.' );
break;
case 5:
alert( '비교하려는 값보다 큽니다.' );
break;
default:
alert( "어떤 값인지 파악이 되지 않습니다." );
}
``
- default 문에는 break를 생략하는 것이 일반적이다.
while 문
var count = 0
while(count < 3){
console.log(count)
count ++ ;
}
// 0 1 2
do..while 문
- 코드 블록을 먼저 실행하고 조건식을 평가한다.
- 코드 블록은 무조건 한 번 이상 실행된다.
var count = 0
do {
console.log(count)
count ++ ;
} while(count < 3)
// 0 1 2
break문
continue
let string = "Hello World";
let search = "l";
let count = 0
for (let i = 0 ; i<string.length; i++){
if(string[i] !== search) continue;
count ++
}
다른 문자열이면 컨티뉴에서 멈추기 때문에 증감식을 안탐