2회독 시작
컴퓨터에게 실행을 요구하는 일종의 커뮤니케이션
프로그래밍 언어는 구문과 의미의 조합으로 표현

크로스 브라우징 이슈로 표준화된 자바스크립트 필요성 대두
1996년, 비영리 표준화 기구인 ECMA 인터내셔널에 자바스크립트 표준화 요청
1997년, 표준화된 자바스크립트 초판 사양 완성 / 상표권 문제로 ECMAScript로 명명
크로스 브라우징 이슈
브라우저에 따라 웹페이지가 정상적으로 동작하지 않는 것
초창기에는 서버로부터 전달받은 HTML, CSS 단순히 렌더링하는 수준
렌더링
HTML, CSS , 자바스크립트로 작성된 문서를 해석해서 브라우저에 시각적으로 출력하는 것
1999년, 자바스크립트 이용해 서버와 브라우저가 비동기 방식으로 데이터를 교환할 수 있는 통신 기능
2006년, DOM을 더욱 쉽게 제어할 수 있게 되었고 크로스 브라우징 이슈도 어느정도 해결
DOM
문서 객체 모델(DOM, Document Object Model)
XML이나 HTML 문서에 접근하기 위한 일종의 인터페이스
2009년, 구글 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임 환경
서버 사이드 애플리케이션 개발에 주로 사용
SPA를 작성하기위한 프레임워크 등장
º 웹 브라우저에서 동작하는 유일한 프로그래밍 언어
º 인터프리터 언어
º 프로토타입 기반의 객체지향 언어
객체지향
객체라는 작은 단위로서 모든 처리를 기술하는 프로그래밍 언어
모든 브라우저는 자바스크립트를 해석하고 실행할 수 있는 자바스크립트 엔진을 내장
하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름
변수 이름을 식별자라고도 부름
식별자는 값이 아닌 메모리 주소를 기억
자바스크립트 엔진은 변수 선언이 어디에 있든 다른 코드보다 먼저 실행
호이스팅
변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징
var score = 80; // 변수 선언과 값의 할당
score = 90; // 값의 재할당

var 키워드로 선언한 변수는 값을 재할당 가능
이전 값이 메모리에서 지워지는 것 x
새로운 메모리 공간 확보하고 그 메모리 공간에 90 할당
특수 문자 제외 문자, 숫자, 언더스코어(_), 달러 기호($) 포함
var firstNAme // 카멜 케이스
var first_name // 스네이크 케이스
var FirstName // 파스칼 케이스
식(표현식)이 평가 되어 생성된 결과
var sum 10 + 20;
// 변수에는 10+20이 평가되어 생성된 숫자 값 30이 할당
사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법
값으로 평가될 수 있는 문
프로그램을 구성하는 기본 단위이자 최소 실행 단위
문은 여러 토큰으로 구성
토큰
문법적인 의미를 가지며 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소
세미콜론은 문의 종료를 나타냄
즉, js엔진은 세미콜론으로 문의 종료된 위치 파악, 세미콜론 자동 삽입 기능 o
if문, for문, 함수 등의 코드 블록 뒤에는 세미콜론 옵션
(자체 종결성)
자바스크립트의 모든 값은 데이터 타입 ( 원시타입 / 객체타입 )

2020년부터 새로운 원시 값 BigInt 추가
BigInt
Number 원시 값이 안정적으로 나타낼 수 있는 최대치인 2^53 - 1보다 큰 정수를 표현할 수 있는 내장 객체
숫자 타입의 값은 배정밀도 64비트 부동소수점 형식
자바스크립트는 모든 수를 실수로 처리
var integer = 10; // 정수
var double = 10.12 // 실수
var negative = -20 // 음의 정수
문자열 타입은 변경 불가능한 값
자바스크립트 일반적 표기법은 작은 따옴표
string = '문자열'; // 작은 따옴표
string = "문자열"; // 큰 따옴표
string = `문자열`; // 백틱(ES6)
모든 공백 그대로 적용
var template = `Template literal`;
불리언 타입의 값은 논리적 참, 거짓을 나타내는 true와 false
undefined가 타입의 값은 undefined가 유일
자바스크립트 엔진이 변수를 초기화 할 때 사용하는 값
변수를 참조했을 때 undefined가 반환된다면 참조한 변수가 선언 이후 값이 할당된 적이 없는, 즉 초기화되지 않은 변수라는 것 간파 가능
null 타입의 값은 null이 유일
변수에 값이 없다는 것을 의도적으로 명시할 때 사용
심벌 타입은 변경 불가능한 원시 타입의 값
다른 값과 중복되지 않는 유일무이한 값
// 심벌 값 생성
var key = Symbol('key');
console.log(typeof key) //symbol
//객체 생성
var obj = {};
//이름이 충돌될 위험이 없은 유일무이한 값인 심벌을 플퍼티 키로 사용
obj[key] = 'value';
6가지 데이터 타입 이외의 모든 값은 모두 객체 타입
자바스크립트를 이루고 있는 거의 모든 것이 객체
º 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
º 값을 참조할 때 한 번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해
º 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해