
헷갈리는 개념들을 한번씩 되짚어보자! 😣🙈😎
return undefined가 생략되어 있는 것)function getName(name) {
return name + '님';
}
name이 해당한다. 함수에서 전달되는 인자들을 담아두는 곳.let result1 = getName('개발자'); // '개발자님' 출력
let result3 = getName('프론트엔드 개발자'); // '프론트엔드 개발자님' 출력
let result4 = getName('백엔드 개발자'); // '백엔드 개발자님' 출력
let num = 1;
let newNum = num++;
console.log(num); //2
console.log(newNum); //1

let newNum = ++num;
console.log("2 더하기 2는 " + 2 + 2); //2 더하기 2는 22

string+number를 할때는 항상 주의해야한다!console.log("2 더하기 2는 " + (2 + 2)); //2 더하기 2는 4
slice(잘릴 시작위치, 잘릴 끝위치)(1) string -> number
Number(), parseInt(), parseFloat()parseInt("1.901");
parseFloat("1.901");
Number("1.901");
parseInt("200") + 1;
var numberAsNumber = "1234";
var numberAsString = numberAsNumber - 0;
console.log(numberAsNumber, typeof numberAsNumber);
console.log(numberAsString, typeof numberAsString);
(2) number -> string
toString()var numberAsNumber = 1234;
var numberAsString = numberAsNumber.toString();
console.log(numberAsNumber, typeof numberAsNumber);
console.log(numberAsString, typeof numberAsString);
var numberAsNumber = 1234;
var numberAsString = 1234 + "";
console.log(numberAsNumber, typeof numberAsNumber);
console.log(numberAsString, typeof numberAsString);
if (age > 65 || age < 21 && res === "한국")
이러한 조건문이 있다면, 왼쪽에서부터 차례대로 실행된다. 즉, 첫번째 ||에서 나뉘어서 이를 기준으로 둘 중 하나만 참이면 true가 된다. 즉,
<참인 경우>
이와 같이 여러조건을 나열하면 가독성이 떨어지고 헷갈리니 웬만하면 괄호로 묶어주는 습관을 가지는 것이 좋다. 바로 이렇게!
if (age > 65 || (age < 21 && res === "한국"))
Assignment
rockPaperScissors 함수를 구현해서 가위 바위 보 게임을 구현해주세요.
가능하면 || 와 && 연산자 둘다 사용해주세요.
player1과 player2 중 이긴 사람이 누군지 리턴해주세요.
예를 들어, player1이 이겼으면 "player1" 이 리턴 되고 그 반대의 경우라면 "player2"가 리턴이 되어야 합니다.
만일 비기는 경우에는 무조건 "player1"이 리턴 되어야 합니다.
풀이
function rockPaperScissors(player1, player2) { // 예제: if ( (player1 === "가위" && player2 === "보" ) || (player1 == "바위" && player2 == "가위") || (player1 === "보" && player2 === "바위") || (player1 === "가위" && player2 === "가위" ) || (player1 == "바위" && player2 == "바위") || (player1 === "보" && player2 === "보") ){ return "player1"; } else { return "player2"; } }
아래 문제는 두고두고 유용하게 사용할 것 같아서 일단 박제해본다!
Assignment
함수 findSmallestElement 의 arr 인자는 숫자 값으로만 이루어진 배열입니다.
arr 의 값들 중 가장 작은 값을 리턴 해주세요.
만일 arr 가 비어있으면 0을 리턴 해주세요.
풀이
function findSmallestElement(arr) { // your code here if (arr.length === 0){ return 0; } else { let num = arr[0]; //임의의 최솟값 지정 for (i = 0; i < arr.length; i++){ if(arr[i] < num){ num = arr[i]; //임의의 최솟값보다 작은 값이 있을 경우 최솟값 재할당 } } return num; } }
let cities = [];
cities[0] = "서울"; // ["서울"]
cities[1] = "대전"; // ["서울", "대전"]
cities[2] = "대구"; // ["서울", "대전", "대구"]
cities[5] = "제주도"; //["서울", "대전", "대구", undefined, undefined, "제주도"]
cities[5] = "포항"; //배열 요소를 수정하기
console.log(cities[5]); // 포항
push와 unshift는 모두 배열에 요소를 추가해주는 메소드! 둘의 차이는 요소들이 배열에 추가되는 위치가 다르다는 것!let cities = [];
cities.push("경주", "전주");
cities.unshift("인천");
console.log(cities); //["인천", "경주", "전주"]
pop메서드를 통해 배열의 마지막 요소를 제거할 수 있다.cities.pop();
console.log(cities); ////["인천", "경주"]
let lastCity = cities.pop();
console.log(lastCity); //"전주"
const arr = [1, 2, 3];
const squares = arr.map(function (x) {
return x * x;
});
console.log(squares) //[ 1, 4, 9 ]
arrb.forEach((el, idx) => {
if (el === 'c') {
idxOfC = idx;
return;
}
});
console.log(idxOfC) // 2
//null은 빈 객체를 참조하고 있다.
console.log(typeof null); //"object"
// array는 확장된 객체이다.
console.log(typeof array); //"object"
✔️ true 로 변환되는 값
✔️ false 로 변환되는 값
Assignment
만으로 계산한 나이를 구하는 함수인 getWesternAge 함수를 구현해 봅시다.
이 함수는 birthday 라는 인자를 받습니다.
이 birthday 는 Date 객체 입니다. birthday 라는 인자를 넣었을 때, 현재를 기준으로 만으로 계산한 나이를 리턴 해주세요.
풀이
function getWesternAge(birthday) { //오늘의 날짜 데이터 만들기 const dateToday = new Date(); //세는 나이 구하기 const year = dateToday.getFullYear() - birthday.getFullYear() // 오늘의 날짜가 생일날짜보다 크거나 같으면 세는 나이 그대로, 작으면 한살 빼주기 if(dateToday.getMonth() >= birthday.getMonth() || (dateToday.getMonth() == birthday.getMonth() && dateToday.getDate() >= birthday.getDate())){ return year; }else{ return yaer -1; } };
//round
console.log(Math.round(2.5)); //3
console.log(Math.round(2.49)); //2
console.log(Math.round(2)); //2
console.log(Math.round(2.82)); //3
//ceil
console.log(Math.ceil(2.5)); //3
console.log(Math.ceil(2.49)); //3
console.log(Math.ceil(2)); //2
console.log(Math.ceil(2.82)); //3
//floor
console.log(Math.floor(2.5)); //2
console.log(Math.floor(2.49)); //2
console.log(Math.floor(2)); //2
console.log(Math.floor(2.82)); //2
Assignment
최소(min), 최대값(max)을 받아 그 사이의 랜덤수를 return 하는 함수를 구현해주세요.
풀이
function getRandomNumber (min, max) { return Math.round(Math.random()*(max-min)+min) }

let plan1 = {
name: "Basic"
};
console.log(plan1.name); //dot notation
console.log(plan1["name"]); //bracket notation

const mutableObj = {
name: '객체'
};
mutableObj = {
name: '수정'
}
mutableObj.name = '수정 됩니다!';
mutableObj에 새로운 객체를 할당하면 오류가 난다. 왜냐하면 새로운 메모리 주소로 수정을 시도하기 때문이다!mutableObj.name로 프로퍼티에 접근해서 데이터를 수정하는 것은 가능하다.mutableObj가 저장된 reference가 바뀌는 것이 아니라 객체 내부의 프로퍼티 값이 수정되는 것이기 때문.Assignment
getData 함수는 세 개의 배열을 인자로 받습니다(salesArr : 날짜별 판매량, reviewArr : 날짜별 리뷰수, likeArr : 날짜별 좋아요수). 다음 요구사항을 충족하는 객체를 만들어서 return 해주세요. 리턴되는 객체는 아래와 같이 3개의 property를 가집니다.(sumAmount : 총 판매량, sumReview : 총 리뷰 개수, sumLike : 총 좋아요 수)
풀이
function getData(salesArr,reviewArr,likeArr){
let obj = {};
let salesSum = 0;
let reviewSum = 0;
let likeSum = 0
for(i=0; i < salesArr.length; i++) {
salesSum += salesArr[i][1];
};
for(i=0; i < reviewArr.length; i++) {
reviewSum += reviewArr[i][1];
};
for(i=0; i < likeArr.length; i++) {
likeSum += likeArr[i][1];
};
obj.sumAmount = salesSum;
obj.sumReview = reviewSum;
obj.sumLike = likeSum;
return obj;
}
>**Assignment**
getAnswer 함수는 아래의 객체에서 '샐러드' 라는 값을 출력합니다.
```js
let myProfile = {
name: '김개발',
address: {
email: 'geabal@gmail.com',
home: '위워크'
},
'my favorite': {
food: [{
name: '샐러드',
price: 3500
}, {
name: '삼겹살',
price: 15000
}],
hobby: ['축구']
}
}
풀이
function getAnswer() { let salad = myProfile['my favorite'].food[0].name; return salad }4) 객체 순회하기
(1) Object.keys(), Object.values, Object.entries
- Object.keys()는 어떤 객체가 가지고 있는 키들의 목록을 배열로 리턴하는 메소드
- 객체 생성자인 Object가 직접 가지고 있는 메소드
const obj = { name: 'melon', weight: 4350, price: 16500, isFresh: true }
Object.keys(obj) // ['name', 'weight', 'price', 'isFresh']
- 이 메소드가 리턴하는 값은 배열이기 때문에 이걸로 반복문을 사용할 수 잇다.
```js
const keys = Object.keys(obj) // ['name', 'weight', 'price', 'isFresh']
for (let i = 0; i < keys.length; i++) {
const key = keys[i] // 각각의 키
const value = obj[key] // 각각의 키에 해당하는 각각의 값
console.log(value)
}
const arr = ['coconut', 'banana', 'pepper', 'coriander']
for (let i = 0; i < arr.length; i ++) {
console.log(i+":"+ arr[i]) // 0:coconut 1:banana 2:pepper 3:coriander
}
for (let i in arr) {
console.log(i+":"+ arr[i]) // 0:coconut 1:banana 2:pepper 3:coriander
}
const obj = {
name: 'melon',
weight: 4350,
price: 16500,
isFresh: true
}
for (let key in obj) {
const value = obj[key]
console.log(key)
console.log(value)
//name
//melon
//weight
//4350
//price
//16500
//isFresh
//true
}
클래스는 객체지향 프로그래밍의 핵심. 객체지향 프로그래밍이란, 프로그램을 객체들로 구성하고, 객체들 간에 서로 상호작용 하도록 작성하는 방법을 뜻함. 클래스는 객체를 잘 설계하기 위한 틀임. 이때 객체는 특정 로직을 갖고있는 행동(메서드)와 변경가능한 상태(멤버 변수)를 가진다. 이에 맞춰 원하는 구조의 객체 틀을 짜놓고, 비슷한 모양의 객체를 공장처럼 찍어낼 수 있도록 하는 것이 클래스이다.
let ray = {
name: 'Ray',
price: 2000000,
getName: function() {
return this.name;
},
getPrice: function() {
return this.price;
},
applyDiscount: function(discount) {
return this.price * discount;
}
}
const rayPriceByFunction = ray.getPrice();
console.log('함수로 접근 => ' +rayPriceByFunction);
this라는 키워드를 사용할 수 있다. 클래스 생성하기
class Car {
constructor(name, price) {
this.name = name;
this.price = price;
this.department = "선릉지점";
this.salesAmount = 0;
}
applyDiscount(discount) {
return this.price * discount;
}
addSales() {
this.salesAmount++;
}
}
객체 생성하기
const morning = new Car('Morning', 2000000);
console.log(morning); //morning: [object Object]
console.log(morning.name); //Morning
console.log(morning.price); //2000000
const price = morning.applyDiscount(0.8);
console.log(price); //1600000
console.log(morning.salesAmount); //0
morning.addSales();
console.log(morning.salesAmount); //1
const morning = new Car('Morning', 2000000);
constructor()메서드를 호출한다.class Car {
constructor(name, price) {
this.name = name;
this.price = price;
}
}
constructor 메서드가 호출된다.constructor() 에서 인자로 넘어오는 name과 price를 사용해 Car instance의 name, price 프로퍼티에 값을 할당했다.this키워드로 접근한다. const morning = new Car('Morning', 20000000);
new를 붙여 생성한다.