헷갈리는 개념들을 한번씩 되짚어보자! 😣🙈😎
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
를 붙여 생성한다.