티스토리 뷰
🍕객체?
- 자바스크립트 데이터 타입 중 하나
- 관련된 정보나 기능끼리 묶여있는 집합체
- 거의 모든 객체들이 JS의 Object 객체의 인스턴스이다. 즉, Object 객체가 최상위 객체라는 소리
- 객체는 key와 value의 집합체
🍕객체 생성방법
1. object literal syntax - {} 중괄호 사용해서 만드는 거 // 일반적인 방법
2. object constructor syntax - 생성자 함수 이용해서 만들기
3. ES6 ) new키워드와 함께 class를 통해 객체 만들기
- JS의 class개념이 ES6에서 도입된 것을 보면 이전에는 생성자 함수(constructor)를 활용해서 객체를 만들었다는 것
- 즉, 클래스의 개념이 도입되기 전에는 함수로 객체를 만들었다.
🍕computed properties
-객체의 값을 가져올 때 배열처럼 objName['key'] 으로 불러오는 것을 말함
-어떤 key를 받아와야 할 지 모를 때 사용
-*key를 전달할 때는 항상 string 으로 전달해야한다.
🍕in (operator)
- 해당 key 가 obj에 있는 지 확인할 때 사용하는 키워드로 key가 존재하면 true, 없으면 false 반환
🍕for...in & for... of
- for ( key in obj ) // 모든 객체 사용가능
- for ( key of iterable) // iterable 객체 사용 가능
iterable? An object that has a Symbol.iterator. The Symbol.iterator is a function that returns a next() function.
- An iterable object (array, set, strings, etc)
🍕객체 클론하기(복사하는 법)
-수동 방법 (구버전)
-Object.assign() 사용하기
관련 정리 ▼
// Objects
// one of the JavaScript's data types.
// a collection of related data and/or functionality.
// Nearly all objects in JavaScript are instance of Object.
// obj = {key : value}; 객체는 key 와 value의 집합체이다.
// 1. Literals and properties
// obj 생성방법
// 1) 중괄호 이용해서 만들기 (basic) => object literal syntax 라고 부름
// 자바스크립트는 1번처럼 class가 없어도 obj를 생성할 수 있음
// 2) class를 템플릿으로 이용해서 new 키워드를 통해 만들기 => object constructor syntax 라고 부름
const obj1 = {
// props
};
const obj2 = new Object();
function print(person) {
console.log(person.name);
console.log(person.age);
}
const cong = { name: 'cong', age: 4 };
print(cong); //인자로 cong이라는 객체를 넘겨줘서 print()를 호출할 때 간편하게 할 수 있음
// JS 는 dynamic clip(?) type language 라서 즉, 동적으로 타입이 runtime 때 결정되는 언어
// runtime: 프로그램이 동작할때
// -> 뒤늦게 하나의 프로퍼티를 추가할 수 있음
// 추가도 가능하고 삭제도 가능하다. 너무 동적이라서 이게 할때는 쉬운데 나중에 유지보수하기 어렵다.
cong.hasjob = true; //추가
delete cong.hasjob; //삭제
// 2. Computed properties 계산된 프로퍼티들
// 주의) key should be always string(키는 항상 string 타입으로 전달해야한다.)
// 마치 배열처럼 오브젝트의 값을 obj['key'] 의 형태로 가져오는 것을 말한다.
console.log(cong.name);
console.log(cong['age']); //computed properties
console.log(cong.hasjob); // undefined
cong['hasjob'] = true; //computed porperties 형식으로 추가가능
console.log(cong.hasjob); //true
// 두가지 형태가 있는데 적재적소가 언제일까?
// computed property 형태를 쓸 때에는 어떤 key를 사용할 지 모를때 쓰면 좋습니다.
// 아래는 예시, 원하는 키의 value를 받아오는 함수를 만들었다고 했을 때
// 사용자가 어떤 key를 입력하는 지 알 수 없기때문에 이떄 computed property 형식으로 쓴다.
function printValue(obj, key) {
console.log(obj[key]);
}
printValue(cong, 'name'); //아까도 말했지만 인자로 보낼때는 string으로
// 3. Property value shorthand
const person1 = { name: 'bob', age: 2 };
const person2 = { name: 'steve', age: 3 };
const person3 = { name: 'dave', age: 4 };
const person4 = new Person('clue', 30);
// 여기서 person4 를 또 만들고 싶은데 일일이 만들기 번거롭다.
// -> 이때 class를 대신해서 새로운 객체를 만드는 것이 바로 constructor Function
//4. Constructor Function
// 생성자 함수는 대문자로 표시하며 사용할때 클래스와 마찬가지로 new 키워드를 이용한다.
function Person(name, age) {
//원래는 아래와 같은 형태였는데 this안에 새로운 객체를 만들고 그것을 리턴해주는 형태가 또 간략해짐
// return {name = name , age = age };
// this = {};
this.name = name;
this.age = age;
// return this;
}
console.log(person4); //Person {name: 'clue', age: 30} 제대로 만들어짐!
// 5. in operator: property existence check (key in obj)
// in 오퍼레이터는 해당 obj안에 key가 있는지 없는지 확인할 수 있는 키워드(있으면 true, 없으면 false 반환)
console.log('name' in cong); //t
console.log('age' in cong); //t
console.log('nothing' in cong); //f
console.log(cong.nothing); //없는 prop에 접근하면 undefined 출력
//TIP: 이전 내용 삭제하고 싶으면 console.clear(); 해주면됨 -> 콘솔창에 console was cleared 뜸
console.clear();
// 6. for..in vs for ..of
// obj를 순회하면서 모든 key들을 받아오고 싶을 때 쓰면 좋음
for (key in cong) {
console.log(key);
}
// for (value of iterable)
// for.. of 는 obj를 쓰는게 아니라 배열이나 리스트같이 iterable한 애들을
const arr = [1, 2, 3, 4];
//원래는 아래와 같이 순회해야 했다면 좀 더 간단하게 출력가능
/* for (let i = 0; i < arr.length; i++) {
console.log(arr[i]);
} */
// for..of 사용, 위의 for loop와 같은 기능 더 간결한 코드!
for (value of arr) {
console.log(value);
}
console.clear();
// 7.Fun cloning
// 객체 복제하기
const user = { name: 'kang', age: '20' };
const user2 = user; //레퍼런스는 각각 생기지만 레퍼런스들이 같은 내용을 가리키고 있음
user2.name = 'gamza'; // 이렇게되면 user의 name도 gamza로 변하게됨
console.log(user.name); //gamza
//그렇다면 정말 객체를 복사하려면 어떻게 해야할까?
//old way 수동적으로 할당
const user3 = {}; // 빈 객체생성
for (key in user) {
user3[key] = user[key]; // user의 모든 키를 user3의 키로 할당
}
console.log(user3);
//new way: Object.assign() 메소드 사용해서 clone하기
/*const user4 = {};
Object.assign(user4, user);*/
const user4 = Object.assign({}, user); // 윗줄보다 간략하게 clone가능
console.log(user4);
//another example , assign()메소드는 여러값을 인자로 받을 수 있었음 MDN참고
// 혹은 ctrl키 누르고 클릭하면 해당 메소드에 관한 정보가 나옴
const fruit1 = { color: 'red' };
const fruit2 = { color: 'blue', size: 'big' };
const fruit3 = { name: 'banana', weight: '2kg' };
const mixed = Object.assign({}, fruit1, fruit2, fruit3);
console.log(mixed.color); //blue
console.log(mixed.size); //big
console.log(mixed); //{color: 'blue', size: 'big', name: 'banana', weight: '2kg'}
// 결론: assign함수를 쓸 때, 뒤에 나온 객체가 앞의 객체와 같은 key를 갖는다면 덮어씌여진다.
'Frontend > JavaScript' 카테고리의 다른 글
[JavaScript] 콜스택과 메모리힙 구조, 참조원리 (0) | 2022.04.09 |
---|---|
[JavaScript | 드림코딩] JSON 개념과 활용방법 및 사이트 (0) | 2022.04.08 |
[JavaScript | 드림코딩] 클래스와 오브젝트의 차이점, 객체지향 언어 클래스 정리 (0) | 2022.04.06 |
[JavaScript | 드림코딩] 함수의 표현과 선언(표현식, 선언문, 화살표 함수 등) (0) | 2022.04.06 |
[JavaScript | 드림코딩] script async 와 defer차이 (0) | 2022.04.03 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 프리렌더링확인법
- 원티드 프리온보딩 FE 챌린지
- 원티드 프리온보딩 프론트엔드 챌린지 3일차
- Prittier
- reactAPI
- nvm경로 오류
- 프리온보딩 프론트엔드 챌린지 3월
- 타입스크립트 장점
- is()
- text input pattern
- getServerSideProps
- nvm 설치순서
- 타입스크립트 DT
- tilde caret
- getStaticPaths
- fs모듈 넥스트
- && 셸 명령어
- grid flex
- 원티드 3월 프론트엔드 챌린지
- 원티드 FE 프리온보딩 챌린지
- ~ ^
- 항해99프론트후기
- 항해99프론트
- 항해99추천비추천
- aspect-ratio
- 부트캠프항해
- D 플래그
- float 레이아웃
- 틸드와 캐럿
- 형제 요소 선택자
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함