(참조) 구조 분해 할당
// 이름과 성을 요소로 가진 배열
let arr = ["Bora", "Lee"]
// 구조 분해 할당을 이용해
// firstName엔 arr[0]을
// lastname엔 arr[1]을 할당하였습니다.
let [firstName, lastname] = arr;
console.log(firstName); // Bora
console.log(lastname); // Lee
쉼표를 사용하면 필요하지 않은 배열 요소를 버릴 수 있습니다.
let arr = ["Bora", "Lee", 35]
let [firstName,, age] = arr;
//필요하지 않은 "Lee" 라는 값은 버리고 다음 값인 35를 age 라는 변수에 할당하기 위해 쉼표로 자리만 만들어두고 저장할 값은 없도록 만들었다.
console.log(firstName); // Bora
console.log(age); // 35
배열 앞쪽에 위치한 값 몇 개만 필요하고 그 이후 이어지는 나머지 값들은 한데 모아서 할당하고 싶을 때, 전개 연산자 ...
를 붙인 매개변수 하나를 추가하면 ‘나머지(rest)’ 요소를 가져올 수 있습니다.
let arr = ["engineer", "Bora", "Lee", 35]
let [job, ...rest] = arr;
console.log(job, rest); // engineer ['Bora', 'Lee', 35]
배열과 마찬가지로 가져오고 싶은 특정 값은 새로운 변수를 통해 할당하고 나머지 값들은 전개 연산자를 통해 한곳에 할당할 수 있다.
const obj = {
a: 1,
b: 2,
c: 3
}
const { c, ...rest } = obj
console.log(c, rest) //3, { a: 1, b: 2 }
const obj = {
a: 1,
b: 2,
c: 3
}
const { c } = obj
console.log(c) //3
const obj = {
a: 1,
b: 2,
c: 3
}
//a 라는 속성명 대신 happy 라는 새로운 변수를 통해 a의 값인 1을 할당할 수 있다.
const { a: happy } = obj
console.log(a) //ERROR!
console.log(happy) //1
(참조) MDN 공식 문서 - Optional chaining
객체에 속성이 없는 (Nullish) 경우에 에러를 발생시키지 않고 undefined
를 반환한다.
const user = {}
console.log(user.name) //ERROR
console.log(user?.name) //undefined
const userA = {
name: 'HEROPY',
age: 85,
address: {
country: 'Korea',
city: 'Seoul'
}
}
const userB = {
name: 'Neo',
age: 22
}
//점 표기법 사용
function getCity_1(user) {
return user.address.city
}
console.log(getCity_1(userA)) //Seoul
console.log(getCity_1(userB)) //ERROR! userB 에는 address 속성이 없기 때문
//선택적 체이닝 사용
function getCity_2(user) {
return user.address?.city //userB에게 없는 address 속성으로 인해 에러가 발생하지 않도록 선택적 체이닝 문법을 사용해서 undefined가 반환된다
}
// or 연산자 활용해서 객체에 값이 없으면 undefined가 아닌 특정 메세지를 반환하도록 작성
function getCity(user) {
return user.address?.city || '주소 없음' //OR 연산자를 사용해서 userB에게 address 속성이 없기 때문에 '주소 없음'이 출력됨
}
함수는 기본적으로 return 값이 없으면 undefined를 반환한다.
switch 조건문은 각 case별로 조건에 부합할 때 실행할 코드를 작성하고 break문을 작성해줘야 다른 case 및 defalut일 때의 코드를 실행하지 않는다. (해당 case에 해당하는 코드만 실행할 수 있게 함)
function price(fruit) {
let p = 0
switch (fruit) {
case 'Apple':
p = 1000
break
case 'Banana':
p = 1500
break
case 'Cherry':
p = 2000
break
default:
p = 0
}
return p
}
console.log(price('Apple')) //1000
console.log(price('Melon')) //0
function price(fruit) {
switch (fruit) {
case 'Apple':
return 1000
case 'Banana':
return 1500
case 'Cherry':
return 2000
default:
return 0
}
}
switch 조건문은 언제나 if 조건문으로 대체할 수 있지만, if 조건문은 상황에 따라 switch 조건문으로 대체하기 어려울 수 있다.
switch문 → if문으로 대체
function price(fruit) { if (fruit === 'Apple') { return 1000 } else if (fruit === 'Banana') { return 1500 } else if (fruit === 'Cherry') { return 2000 } else { return 0 } }
for (let i = 0; i < 10; i += 1) {
if (i % 2 === 0) {
continue
}
console.log(i)
}
continue
키워드는 현재 반복을 종료하고 다음 반복으로 넘어간다. 즉, continue
다음에 있는 코드는 실행하지 않고 다음 반복으로 넘어간다. 완전 그 반복문을 빠져나가는 break
와는 다름!!const fruits = ['Apple', 'Banana', 'Cherry']
>
//일반 for문 사용
for (let i = 0; i < fruits.length; i += 1) {
console.log(fruits[i])
}
>
//for of 사용
for (const a of fruits) {
console.log(a)
}
const users = [
{
name: 'HEROPY',
age: 85
},
{
name: 'Neo',
age: 22
},
{
name: 'Lewis',
age: 34
}
]
for (let i = 0; i < users.length; i += 1) {
console.log(users[i].name) //users.[i]의 값이 객체이기 때문에 점 표기법으로 특정 속성 값을 도출할 수 있음
}
for (const user of users) {
console.log(user.name)
}
const user = {
name: 'HEROPY',
age: 85,
isValid: true,
email: 'thesecon@gmail.com'
}
for (const key in user) {
console.log(key) //속성이 출력됨
console.log(user[key]) //속성에 해당하는 값이 출력됨
}
무조건 코드를 1회 실행하고 그 이후로 조건을 만족하면 계속 반복함
let n = 0
>
do {
console.log(n)
n += 1
} while (n < 5);