1. 모던 자바스크립트란?
ECMAScript: JavaScript가 갖추어야 할 내용을 정리해둔 '설명서' (자바스크립트 표준 명세서)
➡️ 모든 스크립트 언어가 지켜야 하는 표준
JavaScript: ECMAScript를 준수해서 만들어낸 '결과물'
2. 자바스크립트의 동작 원리
JavaScript: 유연한 데이터 타입
- 기본형: Number, String, Boolean, Null, Undefined, Symbol(유일한 값), BigInt(큰 수)
- 참조형: Object
Boolean 형변환
- Falsy 값: false, null, undefined, NaN, 0, ''
- Truthy 값: 나머지 값(빈 배열, 빈 객체 포함)
//AND와 OR의 연산 방식
console.log(true && true); //true 출력
console.log(true && false); //false 출력
console.log(false && true); //false 출력
console.log(false && false); //false 출력
//왼쪽 값 truthy → 오른쪽 값 return
//왼쪽이 truthy해도 오른쪽 값 확인 필요
//왼쪽 값 falsy → 왼쪽 값 return
//왼쪽이 falsy하면 오른쪽 값 확인 필요X
console.log(true || true); //true 출력
console.log(true || false); //true 출력
console.log(false || true); //true 출력
console.log(false || false); //false 출력
//왼쪽 값 truthy → 왼쪽 값 return
//왼쪽이 truthy하면 오른쪽 값 확인 필요X
//왼쪽 값 falsy → 오른쪽 값 return
//왼쪽이 falsy해도 오른쪽 값 확인 필요
console.log(null && undefined); //null 출력
console.log(0 || true); //true 출력
console.log('0' && NaN); //NaN 출력
console.log({} || 123); //{} 출력
//null 병합 연산자: 왼편의 값이 null이나 undefined인지 확인
const example1 = null ?? 'I'; // I
const example2 = undefined ?? 'love'; // love
const example3 = 'Codeit' ?? 'JavaScript'; // Codeit
console.log(example1, example2, example3); // I love Codeit
3. 함수 다루기
//함수 선언식
//호이스팅 발생, 함수 스코프
function printCodeit() {
console.log('Codeit');
}
//함수 표현식: 함수 선언을 값처럼 사용
//호이스팅 X, 블록 스코프
const printCodeit = function() {
console.log('Codeit');
}
printCodeit;
//즉시 실행 함수: (함수 선언)(인수 전달)
(function () {
console.log('Hi!');
})();
JS내의 함수: 일급 함수(객체 타입)
➡️ 함수 활용 가능 종류
- 객체 안의 메소드
- 배열의 요소
- 다른 함수의 파라미터(콜백 함수)
- 다른 함수의 리턴값 (고차 함수)
// arguments
function printArguments(a, b, c) {
for (const arg of arguments) {
console. log(arg);
}// arguments 객체
}
printArguments('Young', 'Mark', 'Koby');
printArguments('Captain');
printArguments('Jayden', 'Scott');
printArguments('Suri', 'Jack', 'Joy', 'Noel');
//단점: 마지막 n개의 argument 다루기 까다로움
// Rest Parameter
// 배열 타입, 배열 함수(splice) 사용 가능
function printArguments( ... args) {
for (const arg of args) {
console.log(arg);
}
};
printArguments('Young', 'Mark', 'Koby');
printArguments('Captain');
printArguments('Jayden', 'Scott');
printArguments('Suri', 'Jack', 'Joy', 'Noel');
function func(arg1, arg2, ...args){
return [arg1, arg2, args];}
func(1); // [1, undefined, []]
func(1, 2, 3);// [1, 2, 3]
func(1, 2, 3, 4, 5); // [1, 2, [3, 4, 5]]
//기존 함수 선언
//변수에 함수 할당
const getTwice = function(number) {
return number * 2;
};
console.log(getTwice(5));
//다른 함수의 argument로 선언
const myBtn = document.querySelector('#myBtn')
myBtn.addEventListener('click', function() {
console.log('button is clicked!');
});
//Arrow Function: 익명 함수
//함수 이름 삭제, 소괄호 오른쪽에 => 추가
//변수에 함수 할당
const getTwice = (number) => {
return number * 2;
};
console.log(getTwice(5));
//다른 함수의 argument로 선언
const myBtn = document.querySelector('#myBtn');
myBtn.addEventListener('click', () => {
console. log('button is clicked!');
};
//Arrow function: arguments 객체 사용 불가
//this 값: Arrow function이 선언되기 이전에 유효한 this값
4. 자바스크립트의 문법과 표현
문장: 어떤 동작이 일어나도록 작성된 최소한의 코드 덩어리
표현식: 결과적으로 하나의 값이 되는 모든 코드
cf) 할당식, 함수 호출: 표현식 && 문장
//Spread 구문
const numbers = [1, 2, 3];
console.log(... numbers);
//1 2 3 출력
const webPublishing = ['Html', 'CSS'];
const interactiveWeb = webPublishing; // 객체값 참조
const interactiveWeb = [...webPublishing, 'JavaScript']; // 배열값 복사
//여러 배열 합치기
const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];
const arr3 = [...arr1, ...arr2];
console.log(arr3);
const arr4 = arr1.concat(arr2);
console.log(arr4);
//배열을 펼쳐서 각각의 arguments로 사용
const introduce = (name, birth, job) => {
console.log(`저는 ${name}입니다.`);
console.log(`저는 ${birth}년 생 입니다.`);
console.log(`직업은 ${job}입니다.`);
}
const myArr = ['코드잇', 2017, '프로그래밍 강사'];
introduce(...myArr);
//객체에 담기
const members = ['태호', '종훈', '우재'];
const newObject = { ...members };
console.log(newObject); // { 0:'태호', 1:'종훈', 2:'우재'}
//구조분해 할당: 배열 오른쪽에 변수 작성
const rank = ['효준', '유나', '민환', '재하'];
const [macbook, ipad, airpods, coupon] = rank;
console.log(macbook);
console.log(ipad);
console.log(airpods);
console.log(coupon);
const rank = ['효준', '유나', '민환', '재하', '규식'];
const [macbook, ipad, airpods, ...coupon] = rank;
console.log(coupon); // ['재하', '규식'];
//구조분해를 이용해 두 값 swap
let macbook = '효준';
let ipad = '유나';
console.log('MacBook 당첨자:', macbook);
console.log('iPad 당첨자:', ipad);
let temp = macbook; // [macbook, ipad] = [ipad, macbook];
macbook = ipad;
ipad = temp;
console.log('MacBook 당첨자:', macbook);
console.log('iPad 당첨자:', ipad);
//객체 구조분해 할당
const macbook = {
title: '맥북프로 16형',
price: 369000,
memory: '16GB',
};
const { title: product, ...rest } = macbook; // title을 product로 이름을 변경함
console.log(title);
console.log(price);
5. 자바스크립트의 유용한 내부 기능
// forEach와 map
const members = ['a', 'b', 'c', 'd'];
members.forEach((member, i, arr) => {
console.log(`${i} ${member}`);
console.log(arr);
});
// 새로운 배열의 결과 값을 return
members.map((member, i, arr) => {
return members[i] + member;
});
//filter와 find
const devices = [
{name: 'Galaxy', brand:'Samsung'},
{name: 'MacbookPro', brand:'Apple'},
{name: 'GalaxyWatch', brand:'Samsung'},
];
//조건을 만족하는 여러개의 값 추출
const apples = devices.filter((element, index, array) => {
return element.brand === 'Apple';
});
//조건을 만족하는 유일한 값 추출
const myLaptop = devices.find((el) => el.brand === 'Gram');
console.log(myLaptop);
// some과 every
const numbers = [1,3,5,7,9];
// some: 조건을 만족하는 요소가 1개 이상 있는지
const someReturn = numbers.some((el) => el > 5);
// some: 조건을 만족하는 요소가 1개 이상 있는지
const everyReturn = numbers.every((el) => el > 5);
const numbers = [1, 2, 3, 4];
numbers.reduce((acc, el, i, arr) => {
return nextAccValue;
}, initialAccValue);
const sumAll = numbers.reduce((acc, el, i) => {
console.log(`${i}번 index 요소로 콜백함수가 동작중입니다.`);
console.log('acc:', acc);
console.log('el:', el);
console.log('----------------');
return acc + el;
}, 0); //초기값 = 0
console.log('sumAll:', sumAll);
//Map: 이름 있는 데이터 저장(다양한 자료형 key 사용 가능)
// Map 생성
const codeit = new Map();
// set 메소드
codeit.set('title', '문자열 key');
codeit.set(2017, '숫자형 key');
codeit.set(true, '불린형 key');
// get 메소드
console.log(codeit.get(2017)); // 숫자형 key
console.log(codeit.get(true)); // 불린형 key
console.log(codeit.get('title')); // 문자열 key
// has 메소드
console.log(codeit.has('title')); // true
console.log(codeit.has('name')); // false
// size 프로퍼티
console.log(codeit.size); // 3
// delete 메소드
codeit.delete(true);
console.log(codeit.get(true)); // undefined
console.log(codeit.size); // 2
// clear 메소드
codeit.clear();
console.log(codeit.get(2017)); // undefined
console.log(codeit.size); // 0
//Set: 여러 개의 값 순서대로 저장, 개별 값 접근 불가능, 중복 비허용
// Set 생성
const members = new Set();
// add 메소드
members.add('영훈'); // Set(1) {"영훈"}
members.add('윤수'); // Set(2) {"영훈", "윤수"}
members.add('동욱'); // Set(3) {"영훈", "윤수", "동욱"}
members.add('태호'); // Set(4) {"영훈", "윤수", "동욱", "태호"}
// has 메소드
console.log(members.has('동욱')); // true
console.log(members.has('현승')); // false
// size 프로퍼티
console.log(members.size); // 4
// delete 메소드
members.delete('종훈'); // false
console.log(members.size); // 4
members.delete('태호'); // true
console.log(members.size); // 3
// clear 메소드
members.clear();
console.log(members.size); // 0
6. 자바스크립트 모듈
모듈화: 하나의 프로그램 ➡️ 기능별 여러 개의 프로그램
모듈: 독립적인 스코프
<script type="module" src="printer.js"></script>
//독립적 스코프를 위해 type="module" 추가 + Live Server Extenstion
// printer.js
export const title = 'CodeitPrinter';
export function print(value) {
console.log(value);
}
// index.js
import { title, print } from './printer.js';
// index.js
//import 시 변수 이름 바꾸기
import { title as printerTitle, print } from './printer.js';
const title = 'Codeit';
print(title);
//'./printer.js' 파일에서 export 하는 변수 전부 import
import * as printerJS from './printer.js';
//export문에서 as 사용 가능
export { title as printerTitle, print };
'Programming Languge > JavaScript' 카테고리의 다른 글
[Codeit;] 쿠키, 세션 스토리지, 로컬 스토리지 이해하기 (0) | 2024.07.31 |
---|---|
[Codeit;] 메타 태그 이해하기 (0) | 2024.07.31 |
[Codeit;] 인터랙티브 자바스크립트 (0) | 2024.07.31 |
[Codeit;] CSS 레이아웃 (0) | 2024.07.30 |
[Codeit;] 자바스크립트 객체 지향 기본기 (0) | 2024.06.23 |