JavaScript 문법 종합반 1주차
[ JS언어의 특징 그리고 역사 ]
▶ JS의 역사
- 1995년 자바스크립트 탄생
- 넷스케이프 커뮤니케이션(LiveScript → Javascript)
- 브라우저 동작 스크립트 언어
- 1999년 자바스크립트 표준화(ECMA-262) 완료
- 2005년 AJAX 등장
- 비동기 웹 애플리케이션 개발 가능
- 폭발적인 UX 향상 🚀
- UX는 User Experience(사용자 경험)의 약자, 유저들이 얼마나 편리하게 프로그램을 사용하는지에 대한 경험
- 2008년 V8 엔진 출시(google)
- super fast(코드 실행 속도 상당부분 개선)
- 🛠️ 컴파일러, 메모리관리 시스템 👍
- 2009년 Node.js 등장, 서버 개발 활성화
- 서버개발의 지각변동 : PHP, Ruby, Python, Java → Javascript(Node.js)
- 하나의 언어 → FrontEnd + BackEnd + DB(MongoDB) = FullStack
- 2015년 ECMAScript 6(ES6) 버전 출시 🚀
- 2016년 프론트엔드 프레임워크(React, Vue, Angular) 대중화, SPA 개발 활성화 🌟
- 현재 자바스크립트는 프론트엔드 및 백엔드 개발 분야에서 널리 사용되며, Node.js를 이용한 서버 개발도 활발하게 이루어지고 있음
▶ JS 언어의 특징
· 객체 지향 프로그래밍 지원
자바스크립트는 객체 지향 프로그래밍이 가능한 언어로서, 객체를 생성하고 관리하는 데에 강점이 있음
자바스크립트에서 객체를 만들 때는 중괄호({})를 사용하여 객체를 만들고, 각 속성을 쉼표(,)로 구분하여 추가
속성은 이름과 값을 가지며, 이름은 문자열로 작성하고, 값은 다양한 데이터 타입을 사용할 수 있음
객체 내부의 함수를 메소드(method)라고 부르며, 속성의 값으로 함수를 추가할 수 있음
객체를 만들어서 필요한 속성과 메소드를 추가하여 사용
- 절차지향: 순서에 따라 일을 처리(1 → 2 → 3 ...)
- 객체지향: 데이터와 함수를 객체라는 그룹으로 묶어서 처리, 객체는 상태와 행동을 가지고 있으며, 상태는 객체의 속성(property)라고 함
- 객체로 단위로 묶으면 여러군데에서 재활용 할 수 있음
· 동적 타이핑
자바스크립트는 동적 타이핑을 지원하는 언어로서, 변수를 선언할 때 타입을 지정하지 않음
이것은 런타임 시점에 변수에 할당되는 값에 따라 자동으로 데이터 타입이 결정된다는 것을 의미
let myVariable = "Hello, world!"; // 변수 선언 및 문자열 데이터 타입으로 할당
console.log(typeof myVariable); // "string" 출력
myVariable = 123; // 숫자 데이터 타입으로 할당
console.log(typeof myVariable); // "number" 출력
myVariable = true; // 불리언 데이터 타입으로 할당
console.log(typeof myVariable); // "boolean" 출력
런타임이란?
런타임 시점이란, 프로그램이 실행되는 동안의 시점을 의미
즉, 코드가 실행되는 동안에 발생하는 시점을 말함. 반대의 의미로는 컴파일 시점이 있음
· 함수형 프로그래밍 지원
자바스크립트는 함수형 프로그래밍을 지원하는 언어로서, 함수를 일급 객체로 취급하고, 고차 함수를 지원
이를 통해 코드의 재사용성과 가독성을 높일 수 있음
일급 객체(first-class object)란?
함수를 일반 값과 마찬가지로 변수에 할당하거나, 함수의 인자로 전달하거나, 함수의 반환값으로 사용할 수 있는 객체를 의미
// 함수를 변수에 할당
const add = function(a, b) {
return a + b;
}
// 함수를 인자로 받는 함수
function calculate(func, a, b) {
return func(a, b);
}
// 함수를 반환하는 함수
function getAddFunction() {
return add;
}
// 함수를 일급 객체로 다루어 코드의 재사용성을 높임
console.log(calculate(add, 2, 3)); // 5
console.log(getAddFunction()(2, 3)); // 5
고차함수란?
함수를 인자로 받거나, 함수를 반환하는 함수를 의미
// 고차 함수 예시: 함수를 인자로 받는 함수
function operate(func, a, b) {
return func(a, b);
}
function add(a, b) {
return a + b;
}
function multiply(a, b) {
return a * b;
}
console.log(operate(add, 2, 3)); // 5
console.log(operate(multiply, 2, 3)); // 6
· 비동기 처리
비동기 처리는 작업을 순차적으로 기다리지 않고, 병렬로 처리할 수 있도록 하는 방식
· 클라이언트 측 및 서버 측 모두에서 사용가능
자바스크립트는 클라이언트 측에서만 사용되는 것이 아니라, Node.js를 이용하여 서버 측에서도 사용됨
이를 통해 웹 개발 전반에 걸쳐 자바스크립트를 활용할 수 있음
[ 기본 문법 ]
▶ 변수와 상수
모든 프로그래밍 언어는 기억하고 싶은 값을 메모리에 저장하고, 저장된 값을 읽어 들여 재사용하기 위해 변수라는 메커니즘을 이용함. 내가 필요한 결과만 변수에 담아 내가 필요할때 재사용하는 것
변수의 5가지 주요 개념
- 변수 이름 : 저장된 값의 고유 이름
- 변수 값 : 변수에 저장된 값
- 변수 할당 : 변수에 값을 저장하는 행위
- 변수 선언 : 변수를 사용하기 위해 컴퓨터에 알리는 행위
- 변수 참조 : 변수에 할당된 값을 읽어오는것
자바스크립트에서 변수는 var, let, const 세 가지 방법으로 선언할 수 있음
var은 예전부터 사용되던 방법이고 let과 const는 ECMAScript 6(ES6)에서 새로 도입된 방법
// var로 변수 선언
var myVar = "Hello World";
console.log(myVar); // "Hello World"
// let으로 변수 선언
let myLet = "Hello World";
console.log(myLet); // "Hello World"
// const로 상수 선언
const myConst = "Hello World";
console.log(myConst); // "Hello World"
var는 같은 이름의 변수를 여러 번 선언해도 오류가 발생하지 않고, 가장 마지막에 선언한 값으로 변수가 덮어씌워짐
let과 const는 같은 이름의 변수를 두 번 선언하면 오류가 발생
const는 선언 후에 값을 변경할 수 없는 상수를 선언할 때 사용함
// var로 변수 덮어쓰기
var myVar = "Hello";
var myVar = "World";
console.log(myVar); // "World"
// let으로 변수 덮어쓰기
let myLet = "Hello";
myLet = "World"; // 기존 값을 덮어쓰기
console.log(myLet); // "World"
// const로 상수 선언 후 값 변경하기
const myConst = "Hello";
myConst = "World"; // 오류 발생
console.log(myConst);
▶ 데이터 타입과 형 변환
· 데이터 타입(숫자)
정수형 숫자(Integer)
let num1 = 10;
console.log(num1); // 10
console.log(typeof num1); // "number"
실수형 숫자(Float)
let num2 = 3.14;
console.log(num2); // 3.14
console.log(typeof num2); // "number"
지수형 숫자(Exponential)
let num3 = 2.5e5; // 2.5 x 10^5
console.log(num3); // 250000
console.log(typeof num3); // "number"
NaN(Not a Number)
let num4 = "Hello" / 2;
console.log(num4); // NaN
console.log(typeof num4); // "number"
- NaN(Not a Number)은 자바스크립트에서 숫자가 아님을 나타내는 값
보통 수학적으로 정의되지 않는 계산을 수행하거나, 숫자가 아닌 값을 숫자로 변환하려고 할 때 발생
Infinity
let num5 = 1 / 0;
console.log(num5); // Infinity
console.log(typeof num5); // "number"
let num6 = -1 / 0;
console.log(num6); // -Infinity
console.log(typeof num6); // "number"
· 데이터 타입(문자열)
문자열은 문자의 나열입니다. 작은 따옴표(')나 큰 따옴표(")로 감싸서 표현
let name = 'Alice';
let message = "Hello, world!";
문자열 길이(length) 확인하기
let str = "Hello, world!";
console.log(str.length); // 13
문자열 결합(concatenation)
let str1 = "Hello, ";
let str2 = "world!";
let result = str1.concat(str2);
console.log(result); // "Hello, world!"
문자열 자르기(substr, slice)
let str = "Hello, world!";
console.log(str.substr(7, 5)); // "world"
console.log(str.slice(7, 12)); // "world"
문자열 검색(search)
없으면 결과값이 -1이 나옴
let str = "Hello, world!";
console.log(str.search("world")); // 7
문자열 대체(replace)
let str = "Hello, world!";
let result = str.replace("world", "JavaScript");
console.log(result); // "Hello, JavaScript!"
문자열 분할(split)
let str = "apple, banana, kiwi";
let result = str.split(",");
console.log(result); // ["apple", " banana", " kiwi"]
· 데이터 타입(불리언(Boolean))
불리언은 참(true)과 거짓(false)을 나타내는 데이터 타입
let bool1 = true;
console.log(bool1); // true
console.log(typeof bool1); // "boolean"
let bool2 = false;
console.log(bool2); // false
console.log(typeof bool2); // "boolean"
불리언 데이터 타입은 조건문(if, else, switch 등)과 논리 연산자(&&, ||, !)와 함께 많이 사용됨
let x = 10;
let y = 5;
if (x > y) {
console.log("x is greater than y");
} else {
console.log("x is less than or equal to y");
}
let a = true;
let b = false;
console.log(a && b); // false
console.log(a || b); // true
console.log(!a); // false
· 데이터 타입(undefined)
undefined는 값이 할당되지 않은 변수를 의미
let x;
console.log(x); // undefined
· 데이터 타입(null)
null은 값이 존재하지 않음을 의미합니다. undefined와는 다름
let y = null;
· 데이터 타입(객체)
자바스크립트에서는 객체가 매우 중요한 역할을 함. 객체는 속성과 메소드를 가지는 컨테이너
중괄호({})를 사용하여 객체를 생성
let person = { name: 'Alice', age: 20 };
person.name // 'Alice'
person.age // 20
· 데이터 타입(배열)
배열은 여러 개의 데이터를 순서대로 저장하는 데이터 타입
대괄호([])를 사용하여 배열을 생성
let numbers = [1, 2, 3, 4, 5];
let fruits = ['apple', 'banana', 'orange'];
· 형변환(암시적 형 변환(implicit coercion))
암시적 형 변환은 자바스크립트에서 자동으로 수행되는 형 변환이며, 일반적으로 연산자를 사용할 때 발생
문자열 변환
console.log(1 + "2"); // "12"
console.log("1" + true); // "1true"
console.log("1" + {}); // "1[object Object]"
console.log("1" + null); // "1null"
console.log("1" + undefined); // "1undefined"
문자열과 다른 자료형이 연산자로 결합되어 있음
이 경우에는 자바스크립트는 다른 자료형을 문자열로 변환한 후 연산을 수행
숫자 변환
console.log(1 - "2"); // -1
console.log("2" * "3"); // 6
console.log(4 + +"5"); // 9
연산자를 사용할 때, 문자열을 숫자로 변환함
이때, 빈 문자열("")이나 공백 문자열(" ")은 0으로 변환됨
· 형변환(명시적 형 변환(explicit coercion))
명시적 형 변환은 개발자가 직접 자료형을 변환하는 것을 말함
불리언 변환
Boolean() 함수를 사용하여 불리언 값으로 변환함
이때, 0, 빈 문자열(""), null, undefined, NaN은 false로 변환됨. 그 외의 값은 true로 변환됨
console.log(Boolean(0)); // false
console.log(Boolean("")); // false
console.log(Boolean(null)); // false
console.log(Boolean(undefined)); // false
console.log(Boolean(NaN)); // false
console.log(Boolean("false")); // true
console.log(Boolean({})); // true
문자열 변환
console.log(String(123)); // "123"
console.log(String(true)); // "true"
console.log(String(false)); // "false"
console.log(String(null)); // "null"
console.log(String(undefined)); // "undefined"
console.log(String({})); // "[object Object]"
String() 함수를 사용하여 다른 자료형을 문자열로 변환함
숫자 변환
console.log(Number("123")); // 123
console.log(Number("")); // 0
console.log(Number(" ")); // 0
console.log(Number(true)); // 1
console.log(Number(false)); // 0
▶ 연산자
다양한 연산자를 제공하여 변수나 상수를 다양한 방법으로 조작할 수 있음
· 산술 연산자(arithmetic operators)
더하기 연산자(+)
console.log(2 + 3); // 5
console.log("2" + "3"); // "23"
console.log("2" + 3); // "23"
console.log(2 + "3"); // "23"
더하기 연산자를 사용하여 숫자나 문자열을 더할 수 있음
이때, 더하기 연산자는 숫자와 문자열을 함께 사용할 경우, 자동으로 문자열로 변환함
곱하기 연산자(*)
console.log(2 * 3); // 6
console.log("2" * "3"); // 6
console.log("2" * 3); // 6
console.log(2 * "3"); // 6
console.log("two" * 3); // NaN
곱하기 연산자를 사용하여 숫자를 곱할 수 있음
이때, 곱하기 연산자는 숫자와 문자열을 함께 사용할 경우, 자동으로 숫자로 변환함
나누기 연산자(/)
console.log(6 / 3); // 2
console.log("6" / "3"); // 2
console.log("6" / 3); // 2
console.log(6 / "3"); // 2
console.log("six" / 3); // NaN
나누기 연산자를 사용하여 숫자를 나눌 수 있음
이때, 나누기 연산자는 숫자와 문자열을 함께 사용할 경우, 자동으로 숫자로 변환함
나머지 연산자(%)
console.log(7 % 3); // 1
console.log("7" % "3"); // 1
console.log("7" % 3); // 1
console.log(7 % "3"); // 1
console.log("seven" % 3); // NaN
나머지 연산자를 사용하여 나눗셈의 나머지를 구할 수 있음
이때, 나머지 연산자는 숫자와 문자열을 함께 사용할 경우, 자동으로 숫자로 변환함
· 할당 연산자(assignment operators)
등호 연산자(=)
let x = 10;
console.log(x); // 10
x = 5;
console.log(x); // 5
등호 연산자를 사용하여 변수에 값을 할당
빼기 등호 연산자(-=)
let x = 10;
console.log(x); // 10
x -= 5;
console.log(x); // 5
빼기 등호 연산자를 사용하여 변수에서 값을 뺄 수 있음
곱하기 등호 연산자(*=)
let x = 10;
console.log(x); // 10
x *= 5;
console.log(x); // 50
곱하기 등호 연산자를 사용하여 변수에 값을 곱할 수 있음
나누기 등호 연산자(/=)
let x = 10;
console.log(x); // 10
x /= 5;
console.log(x); // 2
나누기 등호 연산자를 사용하여 변수에서 값을 나눌 수 있음
나머지 등호 연산자(%=)
let x = 10;
console.log(x); // 10
x %= 3;
console.log(x); // 1
나머지 등호 연산자를 사용하여 변수에서 값을 나눈 나머지를 구할 수 있음
· 비교 연산자(comparison operators)
일치 연산자(===)
console.log(2 === 2); // true
console.log("2" === 2); // false
console.log(2 === "2"); // false
일치 연산자를 사용하여 두 값이 같은지 비교할 수 있음. 이때, 일치 연산자는 자료형까지 비교함
불일치 연산자(!==)
console.log(2 !== 2); // false
console.log("2" !== 2); // true
console.log(2 !== "2"); // true
불일치 연산자를 사용하여 두 값이 다른지 비교할 수 있음. 이때, 불일치 연산자는 자료형까지 비교함
작다(<) 연산자
console.log(2 < 3); // true
console.log(2 < "3"); // true
console.log("2" < 3); // true
작다 연산자를 사용하여 두 값을 비교할 수 있음
이때, 작다 연산자는 숫자와 문자열을 함께 사용할 경우, 자동으로 숫자로 변환함
크다(>) 연산자
console.log(2 > 3); // false
console.log(2 > "3"); // false
console.log("2" > 3); // false
크다 연산자를 사용하여 두 값을 비교할 수 있음
이때, 크다 연산자는 숫자와 문자열을 함께 사용할 경우, 자동으로 숫자로 변환함
작거나 같다(<=) 연산자
console.log(2 <= 3); // true
console.log(2 <= "3"); // true
console.log("2" <= 3); // true
console.log(2 <= 2); // true
작거나 같다 연산자를 사용하여 두 값을 비교할 수 있음
이때, 작거나 같다 연산자는 숫자와 문자열을 함께 사용할 경우, 자동으로 숫자로 변환함
크거나 같다(>=) 연산자
console.log(2 >= 3); // false
console.log(2 >= "3"); // false
console.log("2" >= 3); // false
console.log(2 >= 2); // true
크거나 같다 연산자를 사용하여 두 값을 비교할 수 있음
이때, 크거나 같다 연산자는 숫자와 문자열을 함께 사용할 경우, 자동으로 숫자로 변환함
· 논리 연산자(logical operators)
논리곱(&&) 연산자
console.log(true && true); // true
console.log(true && false); // false
console.log(false && true); // false
console.log(false && false); // false
논리곱 연산자를 사용하여 두 값을 비교할 수 있음
이때, 논리곱 연산자는 두 값이 모두 true일 경우에만 true를 반환함
논리합(||) 연산자
console.log(true || true); // true
console.log(true || false); // true
console.log(false || true); // true
console.log(false || false); // false
논리합 연산자를 사용하여 두 값을 비교할 수 있음
이때, 논리합 연산자는 두 값 중 하나라도 true일 경우 true를 반환함
논리부정(!) 연산자
console.log(!true); // false
console.log(!false); // true
console.log(!(2 > 1)); // false
논리부정 연산자를 사용하여 값을 반대로 바꿀 수 있음
이때, 논리부정 연산자는 true를 false로, false를 true로 바꿈
· 삼항 연산자(ternary operator)
삼항 연산자(?:)
let x = 10;
let result = (x > 5) ? "크다" : "작다";
console.log(result); // "크다"
삼항 연산자를 사용하여 조건에 따라 값을 선택할 수 있음
이때, 삼항 연산자는 조건식 ? true일 때의 값 : false일 때의 값 형태로 사용함
· 타입 연산자(type operators)
typeof 연산자
console.log(typeof 123); // "number"
console.log(typeof "123"); // "string"
console.log(typeof true); // "boolean"
console.log(typeof undefined); // "undefined"
console.log(typeof null); // "object"
console.log(typeof {}); // "object"
console.log(typeof []); // "object"
console.log(typeof function(){}); // "function"
typeof 연산자를 사용하여 값의 자료형을 확인할 수 있음
typeof 연산자는 원시 자료형의 경우,해당 자료형의 이름을, 객체나 함수의 경우, "object" 또는 "function"을 반환함
typeof null의 경우 "object"를 반환하는 버그가 있음
▶ 함수
자바스크립트에서는 함수를 정의하여 코드의 재사용성을 높일 수 있음
· 함수 정의하기
함수 선언문(function declaration)
function add(x, y) {
return x + y;
}
console.log(add(2, 3)); // 5
위의 예제에서는 function 키워드를 사용하여 add라는 함수를 선언했음
함수 선언문을 사용하면 함수를 미리 정의해두고, 필요할 때 호출할 수 있음
함수 표현식(function expression)
let add = function(x, y) {
return x + y;
}
console.log(add(2, 3)); // 5
위의 예제에서는 function 키워드를 사용하여 add라는 변수에 함수를 할당했음
함수 표현식을 사용하면 함수를 변수에 할당하여 익명 함수를 생성할 수 있음
· 함수 호출하기
함수 호출하기
function add(x, y) {
return x + y;
}
console.log(add(2, 3)); // 5
위의 예제에서는 add라는 함수를 호출하여 결과값을 반환함
함수를 호출할 때는 함수 이름 뒤에 괄호를 사용함
· 함수 매개변수와 반환값
함수 매개변수
function add(x, y) {
return x + y;
}
console.log(add(2, 3)); // 5
위의 예제에서는 add라는 함수가 x와 y라는 두 개의 매개변수를 받아들임
함수를 호출할 때는 매개변수에 값을 전달함
함수 반환값
function add(x, y) {
return x + y;
}
let result = add(2, 3);
console.log(result); // 5
위의 예제에서는 add라는 함수가 x와 y라는 두 개의 매개변수를 받아들이고, 이를 더한 값을 반환함
함수를 호출한 결과값을 변수에 할당하여 사용할 수 있음
· 함수 스코프
scope의 뜻은 범위를 뜻함. 즉 JS에 함수 스코프는 변수의 영향 범위를 뜻함
전역 스코프(global scope)
let x = 10;
function printX() {
console.log(x);
}
printX(); // 10
위의 예제에서는 전역 스코프에서 변수 x를 선언하고, 함수 printX에서 변수 x를 참조함
전역 스코프에서 선언된 변수는 어디에서든지 참조할 수 있음
지역 스코프(local scope)
function printX() {
let x = 10;
console.log(x);
}
printX(); //
위의 예제에서는 지역 스코프에서 변수 x를 선언하고, 함수 printX에서 변수 x를 참조함
지역 스코프에서 선언된 변수는 해당 함수 내에서만 참조할 수 있음
블록 스코프(block scope)
if (true) {
let x = 10;
console.log(x);
}
console.log(x); // ReferenceError: x is not defined
위의 예제에서는 if문 내에서 변수 x를 선언하고, 이를 출력함
if문 내에서 선언된 변수는 해당 블록 내에서만 참조할 수 있음
· 화살표 함수
기본적인 화살표 함수
let add = (x, y) => {
return x + y;
}
console.log(add(2, 3)); // 5
위의 예제에서는 화살표 함수를 사용하여 add라는 함수를 선언했음
화살표 함수를 사용하면 함수의 선언이 간결해짐
한 줄로 된 화살표 함수
let add = (x, y) => x + y;
console.log(add(2, 3)); // 5
위의 예제에서는 한 줄로 된 화살표 함수를 사용하여 add라는 함수를 선언했음
함수 내부에 return문이 한 줄로 작성될 경우, 중괄호와 return 키워드를 생략할 수 있음
매개변수가 하나인 화살표 함수
let square = x => x * x;
console.log(square(3)); // 9
위의 예제에서는 매개변수가 하나인 화살표 함수를 사용하여 square라는 함수를 선언했음
매개변수가 하나일 경우에는 괄호를 생략할 수 있음
[ 문 ]
▶ 조건문(if, else if, else, switch)
조건문을 사용하여 특정 조건을 만족하는 경우에만 코드를 실행할 수 있음
· if문
기본적인 if문
let x = 10;
if (x > 0) {
console.log("x는 양수입니다.");
}
변수 x가 양수인지를 판별하여, 양수인 경우 "x는 양수입니다."라는 메시지를 출력
if문은 조건이 참인 경우에만 코드를 실행
if-else문
let x = -10;
if (x > 0) {
console.log("x는 양수입니다.");
} else {
console.log("x는 음수입니다.");
}
변수 x가 양수인지를 판별하여, 양수인 경우 "x는 양수입니다."라는 메시지를 출력하고, 그렇지 않은 경우 "x는 음수입니다."라는 메시지를 출력
if-else문은 조건이 참인 경우와 거짓인 경우 각각 다른 코드를 실행
if-else if-else문
let x = 0;
if (x > 0) {
console.log("x는 양수입니다.");
} else if (x < 0) {
console.log("x는 음수입니다.");
} else {
console.log("x는 0입니다.");
}
변수 x가 양수인지, 음수인지를 판별하여, 0인 경우를 포함해 각각 다른 메시지를 출력
if-else if-else문은 여러 개의 조건을 순서대로 비교하여, 해당하는 조건에 맞는 코드를 실행
· switch문
let fruit = "사과";
switch (fruit) {
case "사과":
console.log("사과는 빨간색입니다.");
break;
case "바나나":
console.log("바나나는 노란색입니다.");
break;
case "오렌지":
console.log("오렌지는 주황색입니다.");
break;
default:
console.log("해당하는 과일이 없습니다.");
break;
}
switch문을 사용하여 과일의 종류에 따라 색상을 출력
switch문은 변수의 값에 따라 여러 개의 경우(case) 중 하나를 선택하여 해당하는 코드를 실행
default는 모든 경우에 맞지 않는 경우에 실행되는 코드를 작성
· 삼항 연산자
let age = 20;
let message = (age >= 18) ? "성인입니다." : "미성년자입니다.";
console.log(message); // "성인입니다."
삼항 연산자를 사용하여 변수 age가 18세 이상인 경우 "성인입니다."
그렇지 않은 경우 "미성년자입니다."라는 메시지를 출력
삼항 연산자는 if문과 비슷한 역할을 하며, 조건이 참인 경우와 거짓인 경우 각각 다른 값을 반환
· 조건문의 중첩
let age = 20;
let gender = "여성";
if (age >= 18) {
if (gender === "남성") {
console.log("성인 남성입니다.");
} else {
console.log("성인 여성입니다.");
}
} else {
console.log("미성년자입니다.");
}
중첩된 if문을 사용하여 성별에 따라 성인 여부를 판별
조건문 안에 또 다른 조건문을 사용하여 복잡한 조건을 판별
· 조건부 실행
let x = 10;
(x > 0) && console.log("x는 양수입니다.");
조건부 실행을 사용하여 변수 x가 양수인 경우에만 "x는 양수입니다."라는 메시지를 출력
&& 연산자를 사용하여 조건부 실행
· 삼항 연산자와 단축 평가
let x;
let y = x || 10;
console.log(y); // 10
삼항 연산자를 사용하여 변수 x가 존재하지 않는 경우 기본값으로 10을 사용
|| 연산자를 사용하여 단축 평가(short-circuit evaluation)를 할 수 있음
변수 x가 존재하지 않는 경우, || 연산자는 false 값을 반환하고, 기본값으로 지정한 10을 반환
· falsy한 값과 truthy한 값
if (0) {
console.log("이 코드는 실행되지 않습니다.");
}
if ("") {
console.log("이 코드는 실행되지 않습니다.");
}
if (null) {
console.log("이 코드는 실행되지 않습니다.");
}
if (undefined) {
console.log("이 코드는 실행되지 않습니다.");
}
if (NaN) {
console.log("이 코드는 실행되지 않습니다.");
}
if (false) {
console.log("이 코드는 실행되지 않습니다.");
}
falsy한 값들을 사용하여 if문의 조건을 만족시키지 못하도록 함
0, 빈 문자열, null, undefined, NaN, false는 falsy한 값으로, if문의 조건을 만족시키지 못함
그 외의 값들은 모두 truthy한 값으로, if문의 조건을 만족시킴
▶ 반복문
반복문을 사용하여 특정 코드를 반복해서 실행할 수 있음
· for문
기본적인 for문
for (let i = 0; i < 10; i++) {
console.log(i);
}
for문을 사용하여 0부터 9까지의 숫자를 출력
for문은 초기값, 조건식, 증감식을 사용하여 반복 횟수를 제어함
배열과 함께 사용하는 for문
let numbers = [1, 2, 3, 4, 5];
for (let i = 0; i < numbers.length; i++) {
console.log(numbers[i]);
}
배열 numbers와 함께 for문을 사용하여 배열의 요소를 출력
배열의 요소 개수만큼 반복하여 실행함
for...in문
let person = { name: "John", age: 30, gender: "male" };
for (let key in person) {
console.log(key + ": " + person[key]);
}
for...in문을 사용하여 객체 person의 프로퍼티를 출력
for...in문은 객체의 프로퍼티를 순서대로 접근할 수 있음
· while문
let i = 0;
while (i < 10) {
console.log(i);
i++;
}
while문을 사용하여 0부터 9까지의 숫자를 출력
while문은 조건식이 참인 경우에만 코드를 반복해서 실행
· do...while문
let i = 0;
do {
console.log(i);
i++;
} while (i < 10);
do...while문을 사용하여 0부터 9까지의 숫자를 출력
do...while문은 일단 한 번은 코드를 실행하고, 그 후에 조건식을 체크하여 반복 여부를 결정
· break문과 continue문
break문
for (let i = 0; i < 10; i++) {
if (i === 5) {
break;
}
console.log(i);
}
for문과 함께 break문을 사용하여 0부터 4까지의 숫자만 출력
break문은 반복문을 종료
continue문
for (let i = 0; i < 10; i++) {
if (i === 5) {
continue;
}
console.log(i);
}
for문과 함께 continue문을 사용하여 5를 제외한 0부터 9까지의 숫자를 출력
[ 배열, 객체 기초 ]
▶ 객체와 객체 메소드
객체(Object)를 사용하여 여러 개의 값을 하나의 변수에 담고 관리할 수 있음
· 객체 생성
기본적인 객체 생성
let person = {
name: "홍길동",
age: 30,
gender: "남자"
};
객체 person을 생성
객체를 만들 때는 중괄호({})를 사용하며, 속성과 값을 콜론(:)으로 구분하여 작성
각 속성과 값은 쉼표(,)로 구분
생성자 함수를 사용한 객체 생성
function Person(name, age, gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
let person1 = new Person("홍길동", 30, "남자");
let person2 = new Person("홍길순", 25, "여자");
생성자 함수 Person()을 사용하여 객체 person1과 person2를 생성
생성자 함수를 사용하면 객체를 일괄적으로 생성할 수 있음
· 객체 속성 접근
let person = {
name: "홍길동",
age: 30,
gender: "남자"
};
console.log(person.name); // "홍길동"
console.log(person.age); // 30
console.log(person.gender); // "남자"
객체 person의 속성에 접근하여 값을 출력
객체의 속성에 접근할 때는 점(.)을 사용하여 속성 이름을 입력
· 객체 메소드
Object.keys() 메소드
let person = {
name: "홍길동",
age: 30,
gender: "남자"
};
let keys = Object.keys(person);
console.log(keys); // ["name", "age", "gender"]
Object.keys() 메소드를 사용하여 객체 person의 속성 이름을 배열로 반환
Object.keys() 메소드는 객체의 속성 이름을 배열로 반환
Object.values() 메소드
let person = {
name: "홍길동",
age: 30,
gender: "남자"
};
let values = Object.values(person);
console.log(values); // ["홍길동", 30, "남자"]
Object.values() 메소드를 사용하여 객체 person의 속성 값들을 배열로 반환
Object.values() 메소드는 객체의 속성 값들을 배열로 반환
Object.entries() 메소드
let person = {
name: "홍길동",
age: 30,
gender: "남자"
};
let newPerson = Object.assign({}, person, { age: 35 });
console.log(newPerson); // { name: "홍길동", age: 35, gender: "남자" }
Object.assign() 메소드를 사용하여 새로운 객체 newPerson을 만듬
Object.assign() 메소드는 기존 객체를 복사하여 새로운 객체를 만듬
객체 비교
let person1 = {
name: "홍길동",
age: 30,
gender: "남자"
};
let person2 = {
name: "홍길동",
age: 30,
gender: "남자"
};
console.log(person1 === person2); // false
console.log(JSON.stringify(person1) === JSON.stringify(person2)); // true
두 개의 객체를 생성하고, 객체 비교를 함
객체를 비교할 때는 일반적으로 === 연산자를 사용할 수 없음
대신 JSON.stringify() 함수를 사용하여 객체를 문자열로 변환한 후, 문자열 비교를 함
객체 병합
let person1 = {
name: "홍길동",
age: 30
};
let person2 = {
gender: "남자"
};
let mergedPerson = {...person1, ...person2};
console.log(mergedPerson); // { name: "홍길동", age: 30, gender: "남자" }
객체 병합을 함. 객체 병합을 할 때는 전개 연산자(...)를 사용
▶ 배열과 배열 메소드
자바스크립트에서는 배열(Array)을 사용하여 여러 개의 값을 저장하고 관리할 수 있음
· 배열 생성
기본적인 배열 생성
let fruits = ["사과", "바나나", "오렌지"];
배열 fruits를 생성. 배열을 만들 때는 대괄호([])를 사용하며, 각 요소는 쉼표(,)로 구분함
배열의 크기 지정
let numbers = new Array(5);
크기가 5인 배열 numbers를 생성. new Array()를 사용하여 배열의 크기를 지정할 수 있음
· 배열 요소 접근
let fruits = ["사과", "바나나", "오렌지"];
console.log(fruits[0]); // "사과"
console.log(fruits[1]); // "바나나"
console.log(fruits[2]); // "오렌지"
배열 fruits의 첫 번째 요소부터 세 번째 요소까지 출력
배열의 요소에 접근할 때는 대괄호([]) 안에 인덱스 값을 넣음
· 배열 메소드
push() 메소드
let fruits = ["사과", "바나나"];
fruits.push("오렌지");
console.log(fruits); // ["사과", "바나나", "오렌지"]
push() 메소드를 사용하여 배열 fruits의 끝에 "오렌지"를 추가
push() 메소드는 배열의 끝에 요소를 추가
pop() 메소드
let fruits = ["사과", "바나나", "오렌지"];
fruits.pop();
console.log(fruits); // ["사과", "바나나"]
pop() 메소드를 사용하여 배열 fruits의 마지막 요소를 삭제
pop() 메소드는 배열의 마지막 요소를 삭제
shift() 메소드
javascriptCopy code
let fruits = ["사과", "바나나", "오렌지"];
fruits.shift();
console.log(fruits); // ["바나나", "오렌지"]
shift() 메소드를 사용하여 배열 fruits의 첫 번째 요소를 삭제
shift() 메소드는 배열의 첫 번째 요소를 삭제
unshift() 메소드
let fruits = ["바나나", "오렌지"];
fruits.unshift("사과");
console.log(fruits); // ["사과", "바나나", "오렌지"]
unshift() 메소드를 사용하여 배열 fruits의 맨 앞에 "사과"를 추가
unshift() 메소드는 배열의 맨 앞에 요소를 추가
splice() 메소드
let fruits = ["사과", "바나나", "오렌지"];
fruits.splice(1, 1, "포도");
console.log(fruits); // ["사과", "포도", "오렌지"]
splice() 메소드를 사용하여 배열 fruits의 두 번째 요소를 삭제하고, 그 자리에 "포도"를 추가
splice() 메소드는 배열의 요소를 삭제하거나, 새로운 요소를 추가할 수 있음
slice() 메소드
let fruits = ["사과", "바나나", "오렌지"];
let slicedFruits = fruits.slice(1, 2);
console.log(slicedFruits); // ["바나나"]
slice() 메소드를 사용하여 배열 fruits의 두 번째 요소부터 세 번째 요소까지 새로운 배열로 만듬
slice() 메소드는 배열의 일부분을 새로운 배열로 만듬
forEach() 메소드
let numbers = [1, 2, 3, 4, 5];
numbers.forEach(function(number) {
console.log(number);
});
forEach() 메소드를 사용하여 배열 numbers의 모든 요소를 출력
orEach() 메소드는 배열의 각 요소에 대해 콜백 함수를 실행
map() 메소드
let numbers = [1, 2, 3, 4, 5];
let squaredNumbers = numbers.map(function(number) {
return number * number;
});
console.log(squaredNumbers); // [1, 4, 9, 16, 25]
map() 메소드를 사용하여 배열 numbers의 모든 요소를 제곱한 새로운 배열을 만듬
map() 메소드는 배열의 각 요소에 대해 콜백 함수를 실행하고, 그 결과를 새로운 배열로 반환
filter() 메소드
let numbers = [1, 2, 3, 4, 5];
let evenNumbers = numbers.filter(function(number) {
return number % 2 === 0;
});
console.log(evenNumbers); // [2, 4]
filter() 메소드를 사용하여 배열 numbers에서 짝수만 추출한 새로운 배열을 만듬
filter() 메소드는 배열의 각 요소에 대해 콜백 함수를 실행하고, 그 결과가 true인 요소만 새로운 배열로 반환
reduce() 메소드
let numbers = [1, 2, 3, 4, 5];
let sum = numbers.reduce(function(accumulator, currentValue) {
return accumulator + currentValue;
}, 0);
console.log(sum);
find() 메소드
let numbers = [1, 2, 3, 4, 5];
let foundNumber = numbers.find(function(number) {
return number > 3;
});
console.log(foundNumber); // 4
find() 메소드를 사용하여 배열 numbers에서 3보다 큰 첫 번째 요소를 찾음
find() 메소드는 배열의 각 요소에 대해 콜백 함수를 실행하고, 그 결과가 true인 첫 번째 요소를 반환
some() 메소드
let numbers = [1, 2, 3, 4, 5];
let hasEvenNumber = numbers.some(function(number) {
return number % 2 === 0;
});
console.log(hasEvenNumber); // true
some() 메소드를 사용하여 배열 numbers에서 짝수가 있는지 확인
some() 메소드는 배열의 각 요소에 대해 콜백 함수를 실행하고, 그 결과가 true인 요소가 하나라도 있는지 확인
every() 메소드
let numbers = [2, 4, 6, 8, 10];
let isAllEvenNumbers = numbers.every(function(number) {
return number % 2 === 0;
});
console.log(isAllEvenNumbers); // true
every() 메소드를 사용하여 배열 numbers의 모든 요소가 짝수인지 확인
every() 메소드는 배열의 각 요소에 대해 콜백 함수를 실행하고, 그 결과가 true인 요소가 모든 요소인지 확인
sort() 메소드
let numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5];
numbers.sort(function(a, b) {
return a - b;
});
console.log(numbers); // [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
sort() 메소드를 사용하여 배열 numbers를 오름차순으로 정렬
sort() 메소드는 배열의 요소를 정렬
reverse() 메소드
let numbers = [1, 2, 3, 4, 5];
numbers.reverse();
console.log(numbers); // [5, 4, 3, 2, 1]
reverse() 메소드를 사용하여 배열 numbers의 순서를 뒤집음
reverse() 메소드는 배열의 요소를 역순으로 정렬