퀴즈3
var tvxq = ['유노윤호', '최강창민', '영웅재중', '믹키유천', '시아준수'];
while (true) {
var choice = prompt(
`현재 멤버: [${tvxq}]\n메뉴를 선택하세요.\n1. 새로운 이름 추가\n2. 기존 이름 삭제\n3. 프로그램 종료`
);
if (choice === '1') {
var newName = prompt('추가할 새로운 멤버의 이름을 입력하세요.');
tvxq.push(newName);
alert(`${newName}이(가) 추가되었습니다.`);
} else if (choice === '2') {
var delName = prompt('삭제할 멤버의 이름을 입력하세요.');
var idx = tvxq.indexOf(delName);
if (idx !== -1) {
tvxq.splice(idx, 1);
alert(`${delName}이(가) 삭제되었습니다.`);
} else {
alert(`${delName}은(는) 잘못된 이름입니다.\n다시 입력하세요!`);
}
} else if (choice === '3') {
alert('프로그램을 종료합니다.');
break;
} else {
alert('잘못된 입력입니다. 메뉴 번호를 정확하게 입력해주세요.');
}
}
3-2. 객체 기초
자바스크립트 객체의 구조
- 자바스크립트는 객체기반의 언어, 기본 타입을 제외한 모든 것(배열, 함수, 객체 등)은 모두 객체라고 표현
- 객체는 0개 이상의 프로퍼티(property)로 구성된 집합 자료구조
-> 프로퍼티는 키(key)와 값(value)의 쌍으로 구성
var name = "뽀삐";
var kind = "진돗개";
var age = 3;
var injection = true;
var favorite = ["산책", "간식"];
var bark = () => console.log("왈왈!");
var dog = {
name: '콩순이',
kind: '진돗개',
favorite: ["낮잠", "방 어지르기"],
age: 3,
injection: true,
bark: () => console.log("왈왈!")
};
var cat = {
name: '콩순이',
kind: '진돗개',
favorite: ["낮잠", "방 어지르기"],
age: 3,
injection: true,
bark: () => console.log("왈왈!")
};
console.log(dog.name);
console.log(cat.name);
var 게시판글 = {
글번호: 11,
작성자: {
계정명: 'abc',
닉네임: '깜찍이',
가입일자: '2023-12-12'
},
글내용: 'ㅎㅇㅎㅇㅎㅇ하아이',
작성일자: "2024-03-26"
};
console.log('=======================');
console.log(dog.age);
console.log(cat.injection);
console.log(cat.favorite[1]);
dog.age++
!dog.injection
dog.favorite.push('꼬리흔들기');
cat.favorite.splice(0, 1);
dog.favorite.slice(0).splice(1,1).reverse();
console.log(dog.favorite);
dog.favorite.splice(1,1);
dog.favorite.reverse();
console.log(dog.favorite);
console.log('======================');
var key = 'name';
console.log(dog.name);
console.log(dog['name']);
console.log(dog[key]);
console.log('======================');
dog.age = 4;
cat.favorite[1] = '실뭉치';
console.log('======================');
cat.friend = '철수';
console.log(cat);
delete cat.hate;
delete cat.friend;
delete cat.favorite[1];
console.log(cat);
- 객체를 생성할 때 무작위 수정가능
- 객체안의 객체 생성가능
- 객체에 저장된 데이터 참조(조회)가능
-> 객체를 참조할 때 아래와 같은 3가지 방법으로 가능
var key = 'name';
console.log(dog.name);
console.log(dog['name']);
console.log(dog[key]);
- 배열타입으로 생성된 객체는 배열 문법 적용가능
([i], splice, reverse ... )
- 객체 수정 가능 (기존에 있는 key로 접근)
- 객체 동적 추가 가능 (기존에 없는 key로 접근)
- 객체 삭제 가능
in 연산자로 프로퍼티 존재 여부 확인하기 (for ~ in문)
var phone = {
company: '삼성',
color: '펄 화이트',
model: '갤럭시 S24 Ultra',
price: 1200000
};
for (var data in phone) {
console.log(phone[data]);
}
const user = {
name: "John",
age: 30,
isAdmin: true
};
for (const key in user) {
alert( key );
alert( user[key] );
}
if (!('memory' in phone)) {
phone.memory = '32GB';
}
console.log(phone);
var newkey = 'memory';
if (!(newkey in phone)) {
phone[newkey] = '32GB';
}
console.log(phone);
for-in문
은 값이 아닌 키가 반복된다는 점에 주의
- 새로운 프로퍼티가 추가하고 싶으면 유무를 확인하고 추가! (이미 존재한다면 수정이되므로 꼭 유무여부를 확인해야함)
객체의 중첩구조
var articles = {
totalCount: 25578,
admin: 'abc1234',
page: 2558,
articleList: [
{
bno: 3,
title: '가위바위보',
writer: '김짱껨뽀',
content: '다덤벼 ^^',
viewCount: 53,
recomm: 10,
regDate: '21-12-07'
},
{
bno: 2,
title: '노는게',
writer: '뽀로로',
content: '제일조와~~~',
viewCount: 253,
recomm: 11,
regDate: '21-12-06'
},
{
bno: 1,
title: '아멘',
writer: '개신교신자',
content: '할렐루야',
viewCount: 23,
recomm: 5,
regDate: '21-12-05'
}
]
};
console.log(articles.articleList.length);
console.log(articles.articleList[2].content);
console.log('=======================');
for(var bbs of articles.articleList) {
console.log(bbs.writer);
}
- 객체 안에 배열이 존재할 때 배열에 대한 부분은 배열문법으로 해결가능!! 위에서도 for of문을 통해 추출하였다!
퀴즈1
var user = {};
user.name = 'John';
user.surname = 'Smith';
user.name = 'Pete';
delete user.name;
console.log(user);
var salaries = {
kim: 1000000,
park: 1600000,
lee: 1300000
}
var total = 0;
for (var money in salaries) {
total += salaries[money];
}
console.log(total);
퀴즈2 (회고)
var userInfo = {
userList: [
{
account: 'kim1234',
password: 'kkk1234',
username: '김두한',
},
{
account: 'park9876',
password: 'ppp9999',
username: '박찬호',
},
{
account: 'hong7766',
password: 'hhh1234',
username: '홍길동',
},
],
};
var userList = userInfo.userList;
var inputAccount = prompt('아이디를 입력하세요.');
var foundUser = null;
for (var user of userList) {
if(inputAccount === user.account) {
foundUser = user;
break;
}
}
if (foundUser !== null) {
var inputPassword = prompt('비번을 입력하세요.');
if(inputPassword === foundUser.password) {
alert(`${foundUser.username}님 로그인 성공!!`);
} else {
alert('비번 틀렸어!');
}
} else {
alert('가입부터 하지?');
}
- 위 퀴즈에서 가장 중요한 부분은 아래부분이다.
var foundUser = null;
for (var user of userList) {
if(inputAccount === user.account) {
foundUser = user;
break;
}
}
- 여기서
var foundUser = null;
을 만든 이유를 설명해주겠다.
위 for문을 확인해보면 입력한 아이디와 user의 아이디가 일치하면 비밀번호를 입력하고 비밀번호 검증을 하게된다.
여기서 var foundUser = user;
코드를 입력하여 입력한 아이디에 맞는 user의 정보를 모두 founduser에게 전해주고 for문을 마친다면 코드를 깔끔하게 나누어 쓸 수 있고 이후에 founduser를 통해 비밀번호 검증코드를 쉽게 짤 수 있다.
- 나는 아래 코드처럼 for문 안에 if문과 else를 같이 넣어 정확하게 풀기 어려웠는데 저렇게 맞는지 틀린지 확인해주는 증거를 남겨놓으면 다음 단계로 넘어가기 쉽다는 것을 깨달았다.