더보기
- JavaScript 강의를 듣고 정리한다.
- HTML과 CSS로 만든 프로젝트에 JavaScript로 몇가지 기능을 추가한다.
1. 필수 강의 정리
스스로 기억하고 싶은 것만 기록
더보기
1. 자바스크립트의 역사와 현재 그리고 미래 (JavaScript, ECMAScript, JQuery, Babel, Node.js)
탄생배경
동적 기능을 구현하기 위한 스크립트 언어 (1995)
자바의 인기에 업혀가려고 LiveScript -> JavaScript
마소의 JScript에 지쳐 ECMAScript로 표준화(1997)
AJAX도입(2004) - 서로 다른 브라우저에 구애받지 않으려고 나온 제이쿼리 등 라이브러리
ECMAScript6 (2015)
다양한 브라우저들의 자바스크립트 엔진(크롬의 V8 등)
개발은 최신으로, 배포는 자바스크립트 트랜스컴파일러로(Babel 등)
SPA를 구현하기 위한 다양한 프레임워크(React, Vue 등)
더보기
2. 콘솔 출력, script async 와 defer의 차이점
NodeJS: 브라우저 없이 자바스크립트를 실행 가능한 런타임 엔진
Dev Tools
MDN(developer.mozilla.org) : 공식사이트처럼 이용하세요
'use strict' : 바닐라JS 작성시 strict 모드로 자바스크립트의 유연성으로 인한 위험 방지, ECMAScript5에 추가되어있음, 성능에도 도움된다.
async vs defer
브라우저는 한줄한줄 HTML&CSS 파싱하며 DOM요소로 변환하다가<script> 태그를 만나면 자바스크립트를 실행한다
parsing HTML - ( fetching js - executing js ) - parsing HTML
async 옵션: HTML파싱과 병렬로 js다운로드
defer 옵션: HTML파싱과 동시에 js 다운받다가 파싱 후 js 실행
더보기
3. 데이터타입, data types, let vs var, hoisting
변수(Variable) - Mutable, read/write
let : 변수 선언 (ES6), 전역변수(global variable)var: 선언 전 값 할당 가능, 블록스코프 적용X
상수(Constant) - Immutable, readonly
const : 보안성, 쓰레드 안전성을 위해
Variable types
primitive(single item) : 값 자체가 메모리에 저장됨
object (box container) : 객체가 가리키는 참조값이 메모리에 저장됨
function : first class function
primitive type
number : Infinity, -Infinity, NaN, bigInt
string : `template literals`
boolean : true, false(0, null, undefined, NaN, '')
null & undefined
symbol : 고유식별자, 우선순위 주고싶을때 + {Symbol.for, symbol.description}
Dynamin typing
선언이 아닌 런타임 시에 타입 결정
더보기
4. 연산자operator, if, for loop
연산자(operator)
String concatenation (+)
Numeric operators (+, -, /, *, %, **)
Increment & decrement (++, --)
할당연산자(=), 비교연산자(>,>=, <)
논리연산자 (||or, &&and, !not)
* 무거운 연산일수록 뒤에서 체크
||(or) : finds the first truthy value -> 유효성 체크시 단순 value는 앞에, 표현식이나 함수는 마지막에 배치해서 호출
&&(and) : finds the first falsy value -> null체크 nullableObject && nullableObject.something (null 아닌 경우에만 값 실행)
동등연산자 (Equality)
==(loose equality)
===(strict equality)
더보기
5. Arrow Function, 함수의 선언과 표현
Function
= subprogram
함수명은 동사형태로
하나의 함수는 한가지 일만!
object → 변수에 할당, 인자로 전달, 반환 가능
Parameters
premitive 파라미터 : passed by value
object 파라미터 : passed by reference
Default parameters (ES6)
파라미터에 값이 전달되지 않을 때, 값이 대체되어서 사용된다
function showMsg(message, from = 'unknown') { console.log(`${message} by ${from}`); } showMsg('Hi!') //Hi! by unknown
Rest parameters (ES6)
전개연산자 - 배열형태로 전달됨
function printAll(...args) { for(let i=0; i<args.length; i++){ console.log(arg[i]); } for(const arg of args){ console.log(arg); } args.forEach((arg) => console.log(arg)); } printAll('dream', 'coding', 'ellie');
- Local scope
- return undefined or return a value
- Early return, early exit
- Hoisting : JS엔진이 선언된 함수를 제일 위로 끌어올려주는것
Function Expression : 선언된 다음부터 할당 가능
Function Declaration : 선언되기 이전에 호출 가능
named function
- better debugging in debugger's stack traces
- recursions
anonymous function (익명 함수)
const print = function() { // anonymous function
console.log('print');
}
Arrow function
const simplePrint = () => console.log('print'); // arrow function
const simpleAdd = (a,b) => a + b;
const simpleMultiply = (a,b) => {
// do something more
return a * b;
};
IIFE (Immediately Invoked Function Expression)
(function hello() { // IIFE
console.log('IIFE');
})();
더보기
6. 객체지향 언어 클래스
클래스와 오브젝트의 차이점(class vs object)
하나의 함수는 한가지 일만!
객체지향 언어 클래스
- better debugging in debugger's stack traces
- recursions
anonymous function (익명 함수)
const print = function() { // anonymous function
console.log('print');
}
Arrow function
const simplePrint = () => console.log('print'); // arrow function
const simpleAdd = (a,b) => a + b;
const simpleMultiply = (a,b) => {
// do something more
return a * b;
};
IIFE (Immediately Invoked Function Expression)
(function hello() { // IIFE
console.log('IIFE');
})();
변수
변수 : 어떤 값에 이름을 붙인 것
예약어 : 자바스크립트에서 이미 사용하는 단어
변수 선언 : let(변수) & const(상수)
- 문자, 숫자, $, _
- 첫글자는 숫자 X
- 예약어 X
- 상수는 대문자로
- 변수명은 읽기 쉽고 이해할 수 있게
자료형
문자형(String)
- "큰따옴표"
- '작은따옴표'
- `백틱`: 문자열 내부에 변수 사용할 때
const msg = `My name is ${name}`;
숫자형(Number)
- 사칙연산 가능
- Infinity, NaN(Not a Number)
불린(Boolean)
- 참,거짓
null & undefined
- null : 존재하지않는 값
- undefined : 할당되지않은 값
+ 객체형
+ 심볼형
typeof 연산자
- typeof 'null' = object로 나오지만, null은 객체가 아니다
대화상자
alert : 알림
prompt : 입력, 두번째 인수로 default값을 지정 가능
confirm : 확인
형변환 (Type Conversion)
명시적 형변환
- String()
console.log(
String(3),
String(true),
String(false),
String(null),
String(undefined)
) //"3" "true" "false" "null" "undefined"
- Number()
- Number(null) //0
- Number(undefined) //NaN
- Number(0) //false
- Number('0') //true
- Number('') //false
- Number(' ') //true
console.log(
Number("1234"),
Number("12asdf34"),
Number(true),
Number(false),
) //1234 NaN 1 0
- Boolean() - false
- 0
- ''
- null
- undefined
- NaN
console.log(
String(3),
String(true),
String(false),
String(null),
String(undefined)
) //"3" "true" "false" "null" "undefined"
연산자(Operators)
기본연산자
- + - * / ** %
- += -=
- ++ --
비교연산자
- < > <= >= == !=
- 결과는 Boolean
- ==(동등연산자) : 값 비교
- ===(일치연산자) : 값 + 타입까지 비교
논리연산자
- &&(AND) : 둘다 true → true, 첫번째 false → 정지, 조건순서 고려해서 성능최적화
- ||(OR) : 하나라도 true → true, 첫번째 true → 정지
- !(NOT)
제어문
조건문
- if
- else
- else if
- switch
반복문
- for : (초기값, 조건, 실행후)
- while
- do..while
- break : 멈추고 반복문 탈출
- continue : 멈추고 다음반복 진
함수(function)
- 한번에 한작업에 집중
- 읽기 쉽고 어떤 동작인지 알 수 있게 네이밍
- showError
- getName
- createUserData
- checkLogin
함수선언문
// 1. 함수선언
function 함수명(매개변수){
console.log(`Hello! ${매개변수}`);
}
// 2. 힘수호출
함수명("파라미터~"); // "Hello! 파라미터~"
- 전역변수 : 어디에서든 접근 가능
- 지역변수 : 함수 내부 스코프에서만 접근
- 매개변수 값은 복사된 후 함수의 지역변수가 된다
함수에 특화된 지역변수를 쓰는 습관을 들이자. 전역변수가 많아지면 관리가 힘들다
// 1. 함수선언
function 함수명(매개변수){
console.log(`Hello! ${매개변수}`);
}
// 2. 힘수호출
함수명("파라미터~"); // "Hello! 파라미터~"
// 3. OR
function sayHello(name){
let newName = name || 'friend';
let msg = `Hello! ${newName}`
console.log(msg);
}
sayHello(); //"Hello! friend"
sayHello('Jane') //"Hello! Jane"
// 4. default value
function sayHello(name = 'friend'){
let msg = `Hello! ${name}`
console.log(msg);
}
sayHello(); //"Hello! friend"
sayHello('Jane') //"Hello! Jane"
// 5. return으로 값 반환 & 함수 종료
function showError(){
alert('에러!');
return;
alert('절대 실행되지 않는 코드입니다');
}
const result = showError();
console.log(result); //undefined
함수표현식(Function Expression)
let sayHello = function(){
console.log('Hello!');
}
sayHello(); //"Hello!"
- 함수 선언문 : 어디서든 호출 가능
- 인터프리터 언어: 한줄씩 읽으며 순차적으로 실행, 즉시 결과 반환
- 호이스팅: 실행전 초기화 단계에서 코드의 모든 함수 선언문을 찾아서 생성 → 코드 전체가 사용가능범위
- 함수 표현식 : 코드에 도달하면 함수 생성
화살표 함수(arrow function) - ES6
let showError = () => {
alert('에러!');
}
showError(); //"에러!"
객체(Object)
프로퍼티(property)
- 키와 값으로 구성
- 접근,추가는 .으로
- 삭제는 delete 명령
- 단축프로퍼티
- in : 프로퍼티 존재확인
- for..in 반복문으로 키값을 가져올 수 있다
메소드(method) - this
- 화살표 함수는 일반함수와 달리 자신만의 this를 가지지 않음
- 화살표 함수 내부에서 this 사용하면, 외부에서 값을 가져옴
- 전역객체
- 브라우저 환경: window 객체
- Node.js : global 객체
- 전역객체
배열(Array)
순서가 있는 리스트
- [index]
- 문자, 숫자, 함수, 객체 등
- 배열의 메소드
- push()
- pop()
- shift(), unshift()
- for
- for .. of : 인덱스를 얻지 못한다
'SOJU 2기' 카테고리의 다른 글
[SOJU] JavaScript (2) (0) | 2023.05.10 |
---|---|
[SOJU] HTML & CSS (0) | 2023.04.11 |
[SOJU] GIT (0) | 2023.03.23 |
[SOJU] 웹개발 개념들 (0) | 2023.03.23 |