1. 조건문
- 자바스크립트에서는 조건문을 사용하여 특정 조건을 만족하는 경우에만 코드를 실행 할 수 있음
ⅰ. if 문
- 기본적인 if 문
- if(조건문 - true 또는 false가 나올 수 있는 조건) {
main logic
}
- if(조건문 - true 또는 false가 나올 수 있는 조건) {
let x = 10
if (x < 0) {
console.log('x는 양수입니다.')
}
// Q. y의 길이가 5보다 크거나 같으면 길이를 출력
let y = "hello world"
if(y.length >= 5) {
console.log(y.length)
}
- if - else 문
- if (조건문) {
main logic #1 → true인 경우 실행할 코드
} else {
main logic #2 → false인 경우 실행할 코드
}
- if (조건문) {
let x = -3
if(x > 0) { // -> false값을 반환
console.log('x는 양수입니다.')
} else {
console.log('x는 음수입니다.')
}
- if - else if - else
- if (조건1) {
main logic #1 → 조건1이 true인 경우 실행할 코드
} else if (조건2) {
main logic #2 → 조건1이 false이고 조건2가 true인 경우 실행할 코드
} else {
main logic #3 → 모든 조건이 false인 경우 실행할 코드
}
- if (조건1) {
let x = 5
if (x < 0) {
console.log("1")
} else if (x >=0 && x < 10) {
console.log("2")
} else {
console.log("3")
}
- switch
- 변수의 값에 따라, 여러 개의 경우(case)중 하나를 선택
- switch (변수) {
case 1:
실행할 코드
break;
case 2
실행할 코드
break;
.
.
case n:
실행할 코드
break;
default:
실행할 코드
break;
} - default는 모든 경우에 맞지 않는 경우에 실행할 코드를 작성
- break는 모든 case와 default가 끝날 때 break 문을 넣어야지 해당 코드만 실행되고 끝남
let fruit = "사과"
switch (fruit) {
case "사과":
console.log('사과입니다.')
break
case "바나나":
console.log('바나나입니다.')
break
case "키위":
console.log('키위입니다.')
break
default:
console.log('아무것도 아닙니다.')
break
}
ⅱ. 조건문의 중첩
- 조건문 안에 또 다른 조건문을 사용하여 복잡한 조건을 판별할 수 있음
- 중첩문을 많이 쓰면 코드의 가독성이 떨어지고, 코드 유지 보수가 어려워지기 때문에 꼭 필요할 때만 사용
let age = 20
let gender = "여성"
// 미성년자 구분
if (age >= 18) {
if (gender === "여성") {
console.log("성인 여성입니다.")
} else {
console.log("성인 남성입니다.")
}
} else {
if (gender === "여성") {
console.log("미성년 여성입니다.")
} else {
console.log("미성년 남성입니다.")
}
}
ⅲ. 조건부 실행
- and(&&) 연산자를 사용하여 조건부 실행을 할 수 있음
- 코드를 간략하게 표현할 수 있음
let x = 10;
(x > 0) && console.log("x는 양수입니다.") // -> &&(and)조건 때문에 실행되고 있음
// if (x > 0) {
// console.log("x는 양수입니다.")
// }
ⅳ. 삼항 연산자와 단축 평가
- or(||) 연산자를 사용하여 단축 평가(short-circuit evaluation)를 할 수 있음
let y; // y에는 undefined
let z = y || 20; // y가 undefined 이면 20을 기본값으로 세팅
console.log(z)
ⅴ. falsy한 값과 truthy한 값
- 0, 빈 문자열, null, undefined, NaN, false는 falsy한 값으로 if문의 조건을 만족시키지 못함
- 그 외의 모든 값들은 truthy한 값으로 if문의 조건을 만족
if (0) {
console.log("hello")
}
if ("") {
console.log("hello")
}
if (null) {
console.log("hello")
}
if (undefined) {
console.log("hello")
}
if (NaN) {
console.log("hello")
}
if (false) {
console.log("hello")
}
if (true){
console.log("hello") // 이 조건문만 실행됨
}
2. 객체
- 자바스크립트에서는 객체(Object)를 사용하여 여러 개의 값을 하나의 변수에 담고 관리할 수 있음
ⅰ. 객체 생성
- 기본적인 객체 생성 방법
- let 객체명 = {
key1: value1,
key2: value2,
} - 객체를 만들 땨는 중괄호를 사용하며, 속성(key)과 값(value)을 콜론(:)으로 구분하여 작성하고, 각 속성과 값은 쉼표로 구분함
- key에 할당되는 value는 어떠한 값도 가능하고 데이터 타입의 제한이 없음
- let 객체명 = {
ⅱ. 생성자 함수를 이용한 객체 생성 방법
- 많은 객체를 한꺼번에 여러개를 생성할 수 있음
function Person(name, age, gender) {
this.name = name,
this.age = age,
this.gender = gender
};
let person1 = new Person("홍길동", 30, "남자");
let person2 = new Person("홍길순", 20, "여자");
ⅱ. 객체 속성 접근
- 객처명.Property()를 사용하여 객체의 속성에 접근하여 값을 출력할 수 있음
let person = {
name: "홍길동",
age: 30,
gender: "남자"
};
console.log('1', person.name);
console.log('2', person.age);
console.log('3', person.gender);
ⅲ. 객체 메소드
- 객체가 가진 여러가지 기능(Object.~~~)
- Object.key(매개변수) 메소드
- key를 가져오는 메소드
- 객체안에 있는 key들이 배열 형태로 반환함
- Object.values() 메소드
- 객체안에 있는 value값들ㅇ르 배열로 반환함
- Object.entries() 메소드
- key와 value를 묶어서 배열로 만든 배열(2차원 배열)
- key, value가 각각의 요소로 분리가 되고, 그 요소들이 배열 형태로 반환함
- Object.assign() 메소드
- 기존 객체를 복사하여 새로운 객체로 반환함
- 객체를 복사하면서 속성을 바꾸는 법
Object.assign(새로운 객체명, 복사할 객체명, {key: value})
let person = {
name: "홍길동",
age: 30,
gender: "남자"
};
let keys = Object.keys(person);
console.log('keys =>', keys) // keys => [ 'name', 'age', 'gender' ]
let values = Object.values(person)
console.log('values =>', values) // values => [ '홍길동', 30, '남자' ]
let entries = Object.entries(person)
console.log('entries =>', entries) // entries => [ [ 'name', '홍길동' ], [ 'age', 30 ], [ 'gender', '남자' ] ]
let newPerson = {};
Object.assign(newPerson, person)
console.log('newPerson =>', newPerson) // newPerson => { name: '홍길동', age: 30, gender: '남자' }
Object.assign(newPerson, person, { gender: "여자" });
console.log('newPerson =>', newPerson); // newPerson => { name: '홍길동', age: 30, gender: '여자' }
- 객체 비교
- 객체나 배열은 다른 데이터 타입에 비해 크기가 크기 때문에 메모리에 저장할 때 별도의 공간에 저장됨
=> 객체끼리 === 연산자를 사용해서 비교하면 별도 공간에 대한 주소를 비교하는 것이기 때문에 false를 반환 - JSON.stringify() 함수를 사용하여 객체를 문자열로 변환한 후, 문자열 비교
- 객체나 배열은 다른 데이터 타입에 비해 크기가 크기 때문에 메모리에 저장할 때 별도의 공간에 저장됨
// person1 별도 공간에 대한 주소
let person1 = {
name: "홍길동",
age: 30,
gender: "남자"
}
// person2 별도 공간에 대한 주소
let person2 = {
name: "홍길동",
age: 30,
gender: "남자"
}
console.log(person1 === person2) // false
console.log(JSON.stringify(person1) === JSON.stringify(person2)); // true
- 객체 병합
- 전개 연산자(...)를 사용해서 병합
spread operator - ES6에서 나온 문법
- 전개 연산자(...)를 사용해서 병합
let person1 = {
name: "홍길동",
age: 30
};
let person2 = {
gender: "남자"
};
let perfectMan = {...person1, ...person2}
console.log(perfectMan)
3. 배열
- 배열(Array)을 사용하여 여러 개의 값을 저장하고 관리할 수 있음
ⅰ. 기본 배열 생성
- 키워드 = []
- 배열을 만들 때는 대괄호를 이용하여 생성하고 콤마를 이용하여 각각을 구분함
- 대괄호 안에 객체를 나열하고 각각의 객체는 index 번호를 가지고 있고, index는 0부터 시작됨
- 배열의 길이 구하기
✔변수명.length
- 배열의 크기 지정
- new Array()를 사용하여 배열의 크기를 지정해서 사용할 수 있음
let fruits = ["사과", "바나나", "오렌지"];
let number = new Array(5);
console.log(fruits.length) // 3
console.log(number) // [ <5 empty items> ]
console.log(number.length) // 5
- 요소 접근
- 변수명[인덱스 값]을 통하여 각각의 요소에 접근할 수 있음
let fruits = ["사과", "바나나", "오렌지"];
console.log(fruits[0]); // "사과"
console.log(fruits[1]); // "바나나"
console.log(fruits[2]); // "오렌지"
ⅱ. 배열 메소드
- push() 메소드
- push 메소드는 배열의 끝에 요소를 추가함
let fruits = ["사과", "바나나"];
fruits.push("오렌지");
console.log(fruits) // [ '사과', '바나나', '오렌지' ]
- pop() 메소드
- pop() 메소드는 배열의 마지막 요소를 삭제함
let fruits = ["사과", "바나나"];
fruits.pop();
console.log(fruits); // [ '사과' ]
- shift() 메소드
- shift() 메소드는 배열의 첫번째 요소를 삭제함
let fruits = ["사과", "바나나", "키위"];
fruits.shift();
console.log(fruits); // [ '바나나', '키위' ]
- unshift() 메소드
- unshift()메소드는 배열의 첫번째 요소에 추가함
let fruits = ["사과", "바나나", "키위"];
fruits.unshift("포도");
console.log(fruits); // [ '포도', '사과', '바나나', '키위' ]
- splice() 메소드
- 위치를 지정해서 어떤 요소를 삭제하거나 추가할 수 있음
- splice(startNumber, deleteCount, 추가할 요소1, 추가할 요소2, ...)
- 추가할 요소를 적지 않으면 삭제만 할 수 있음
let fruits = ["사과", "바나나", "키위"];
fruits.splice(1, 1, "포도"); // 첫번째 요소부터 시작해서 시작한 부분의 첫번째 요소까지 삭제하고 포도를 추가
console.log(fruits); // [ '사과', '포도', '키위' ]
- slice() 메소드
- 배열의 일부분을 새로운 배열로 만듦
let fruits = ["사과", "바나나", "키위"];
let slicedFruits = fruits.slice(1, 2); // 두번째 요소부터 세번째 요소전까지 새로운 배열로 만들어서 반환
console.log(slicedFruits); // [ '바나나' ]
- forEach() 메소드
- 배열의 각 요소에 대해 콜백함수를 실행함
- 콜백함수: 매개변수 자리에 함수를 넣는 것
let numbers = [4, 1, 5, 4, 5];
numbers.forEach(function(item) {
console.log('item입니다 => ' + item);
});
/*
item입니다 => 4
item입니다 => 1
item입니다 => 5
item입니다 => 4
item입니다 => 5
*/
- map() 메소드
- 배열의 각 요소에 대해 콜백함수를 실행하고, 그 결과를 새로운 배열에 반환함
- 콜백함수 안에 반드시 return 문을 가지고 있어야함
- 원본의 배열의 길이만큼 값을 리턴함
- return문을 입력하지 않으면 배열안이 undefined로 채워지고 실제로 아무것도 보여주지 않음
let numbers = [4, 1, 5, 4, 5];
let newNumbers = numbers.map(function(item) {
return item * 2;
});
console.log(newNumbers); // [ 8, 2, 10, 8, 10 ]
- filter() 메소드
- 배열의 각 요소에 대해서 콜백 함수를 실행하고 그 결과가 ture인 요소만 새로운 배열로 반환
- return문 뒤에 조건문이 들어가서 조건문에 해당되는 것만 배열로 리턴함
let numbers = [4, 1, 5, 4, 5];
let filteredNumbers = numbers.filter(function (item) {
return item > 3;
});
console.log(filteredNumbers); // [ 4, 5, 4, 5 ]
- find() 메소드
- return문의 조건의 결과값이 true인것 중에 첫번째인 요소만 반환
let numbers = [4, 1, 5, 4, 5];
let result = numbers.find(function(item) {
return item > 3;
});
console.log(result) // 4
4. 반복문
- 반복문을 사용해서 특정 코드를 반복해서 실행할 수 있음
- 프로그래밍에서는 반복하는 작업을 자동으로 하기 위해서 하는 것이기 때문에 반복문은 핵심적인 역활을 함
ⅰ. for문
- 기본적인 for문
for (초기값; 조건식; 증감식) {
반복할 코드
}
for (let i = 0; i < 10; i++) { // i라는 변수는 0부터 시작해서 10에 도달하기 전까지 계속 반복하며
// 한사이클이 돌고나면 1을 더함
console.log(`for문 돌아가고 있음 => ${i}`)
}
- 배열과 함께 사용하는 for문
- 배열과 for문을 함께 사용하면 배열의 요소 개수만큼 for문이 반복하여 실행됨
const arr = ["one", "two", "three", "four", "five"];
for (let i = 0; i < arr.length; i++) {
console.log(i);
console.log(arr[i]);
};
// Q. 0부터 10까지의 수 중에서 2의 배수만 출력
for (let i = 0; i <= 10; i++) {
if (i >= 2) {
if (i % 2 === 0) {
console.log(i);
}
}
}
let person = {
name: "John",
age: 30,
gender: "male",
};
for (let key in person) { // {person['key']: 객체의 value에 접근할 수 있는 또다른 방법
// key => 위에 적힌 객체안에 key를 가리킴
console.log(`${key}: ${person[key]}`);
}
ⅱ. while문
- while문은 조건식이 참인 경우에만 코드를 반복해서 실행함
- while (조건) {
main logic
증감식
}
let i = 0;
while (i < 10) {
console.log(i);
i++;
}
// Q. while문을 활용해서, 3 초과 100 미만의 숫자 중 5의 배수인 것만 출력
let i = 3;
while (i < 100) {
if (i % 5 === 0 && i >= 5) {
console.log(i);
}
i++;
}
ⅲ. do - while 문
- do - while문은 일단 한 번은 코드를 실행하고 그 후에 조건식을 체크하여 반복을 결정함
let i = 0;
do {
console.log(i);
i++;
} while (i < 10);
ⅳ. break문과 continue문
- break문
- for문과 함께 break문을 사용
- break문은 반복문을 종료함
for (let i = 0; i < 10; i++) {
if (i === 5) {
break;
}
console.log(i);
}
/*
0
1
2 출력됨
3
4
*/
- continue문
- continue문을 만나면 해당 조건을 제외하고 그 다음으로 넘어감
for (let i = 0; i < 10; i++) {
if (i === 5) {
continue;
}
console.log(i);
}
/*
0
1
2
3
4
6
7
8
9
*/
'공부 > JavaScript' 카테고리의 다른 글
JavaScript 문법 종합 2주차(1) (1) | 2023.05.24 |
---|---|
JavaScript 문법 종합 1주차(숙제) (0) | 2023.05.24 |
JavaScript 문법 종합 1주차(1) (0) | 2023.05.23 |
JavaScript 기초4 (0) | 2023.05.03 |
JavaScript기초 3 (1) | 2023.05.02 |