카테고리 없음

자바 스크립트 1주 11~12 강 - 객체, 배열1

8나지 2024. 4. 22. 17:07

객체장점 - 하나의 변수에 여러개의 값을 넣을 수 있음

키에 들어가는 벨류에는 숫자, 함수, 글자, 배열형태, 객체 등등 제한이 없다

객체 생성방법 - 기본적 생성, 생성자 함수(this) 이용,

객체를 일괄적으로 생성하는 유용한 방법이 존재한다.

let person1 = new person("홍길동", 30, "남자");

let person2 = new person("홍길순", 20, "여자");

 

접근하는 방법 : (1-1) person이라는 객체에서 name에 어떻게 접근하는지

console.log();                     만약 콘솔.로그에서 홍길동이라는 이름을 출력하고 싶다 

console.log(person.);         객체이름. ; .를 통해서 그 객체의 property(속성)에 접근 가능

console.log(person.name);   객체의 키를 쓰기

console.log("1", person.name) 구분자 넣어주면 홍길동이 출력됨

 

객체 메소드 : 객체가 가진 여러가지 기능 ; object.~~~ 

object.key()                          key를 가져오는 메소드

ex)

1-1에서는 name, age, gender 가 키

let keys = object.keys(person);

console.log("keys => ", keys);            keys => ['name', 'age', 'gender']

 

let values = object.values(person);

console.log("values => ", values);     values => ['홍길동', 30, '남자']

 

entries

key와 value를 묶어서 배열로 만든 배열 ; 이차원 배열로 만들었다.

let entries = object.entries(person);

console.log("entries => ", entries);      entries => [['name', '홍길동'], ['age', 30], ['gender', '남자']]

; 키 벨류 가 배열이 되서 각각의 요소로 분리가 됬고, 그 요소들이 하나하나 배열로 들어감

 

assign 

객체를 복사한다.

let newperson = {};

object.assign(newperson, person);             assign(targer:{}, source any):  어디에다가 복사할래, 뭘 복사할래

console.log("newperson => ", newperson);   newperson => {name: '홍길동', age: 30, gender:'남자'}

만약에 그대로 복사 하고 싶은데 나이만 31로 하고 싶다면

let newperson = {};

object.assign(newperson, person, {age: 31});

console.log("newperson => ", newperson);   newperson => {name: '홍길동', age: 31, gender:'남자'}

 

객체비교

let person1 = {                  ⬅️

name: "홍길동",                여기가 
age: 30,
gender: "남자",                 다
};
let person2 = {
name: "홍길동",                 객체
age: 30,
gender: "남자",
};                                        ⬅️
 
let str1 = "aaa"; 
let str2 = "aaa";
console.log("answer =>", person1 ===person2);          answer = false
console.log("answer2 => ", str1 === str2);                     answer2 = true
; 객체와 배열은 크기가 큼. 그러므로 메모리에 저장할 때 별도의 공간에 저장함

그러므로 person1 가지고 있는 값은 별도 공간에 대한 주소를 저장

person2 도 별도 공간에 대한 주소 저장 ; 값에 대한 직접적인 값이 아닌 저장시 주소를 가지고 있으므로

각각의 주소가 다름 / str은 크기가 작아서 직접 저장하므로 

 

그렇다면 어떻게 비교할 수 있는가 (stringify ; 문자열화 시킨다)

console.log(JSON.stringify[person1] === JSON.stringify[person2]);

;   {}사이의 값 name: "홍길동", age: 30gender: "남자",를 주소값이 아닌 문자열화 시킴  

 

객체 병합

만약 person1에 gender가 없고, person2에는 gender만 있고 name, age가 없다면

let person1 = {

name: "홍길동",

age: 30,

};

 

let person2 = {

gender: "남자",

};  

 

let perfectman = {...};         {}안에 있는 다 풀어서 해체 시켜줘 라는 명령어 ...(spread operator;es6에서 나옴) 사용

let perfectman = {...person1};           => let perfectman = {name:"홍길동", age:30}; 이런 뜻

그러므로

let perfectman = {...person1, ...person2};

console.log(perfectman);                         {name:'홍길동', age:30, gender:'남자'}


배열생성

1-1 기본생성 ; 배열은 기본적으로 나열함. index를 가지고 있음 / 객체와 다름(object=key-valuepair)

let fruits = ["사과", "바나나", "오렌지"];           배열은 자기가 몇 번째 순서인지 꼭 알고있어야함

1-2 크기지정 후 생성

let number = new array(5);                           5개의 요소를 가지고 있는 배열을 새로 만들어줘

console.log(number);                                    [< 5 empty items>] 5개의 엠티 아이템즈 라는 배열만들어짐

 

배열의 length 많이 쓰임 (for 문, while도 배열과 많이 쓰임)

console.log(fruits.length);                             3

console.log(number.length);                         5 

 

2. 요소접근 : key 가 아닌 index 로 접근

console.log(fruits[0]);                                    사과

; [포문]안을 변수로 대체 시키면서 동적으로 나오게 하는 처리 ;많이나옴 => 포문과 배열은 짝궁..

3. 배열 메소드

3-1. push

let fruits = ["사과", "바나나", "오렌지"]; 

fruits.push("키위");

console.log(fruits);

3-2. pop ; 마지막 요소삭제 / 3-3. shift ; 첫번째 요소 삭제  / 3-4. unshift; 첫번째 요소에 추가

let fruits = ["사과", "바나나", "오렌지"];

fruits.pop();                     /         fruits.shift();                  /       fruits.unshift("포도"); 

console.log(fruits);         /       console.log(fruits);         /       console.log(fruits);

['사과', '바나나']                 /        ['바나나', '오렌지']           /      ['포도', '사과', '바나나', '오렌지'];

 

3-5. splice ;위치지정                                      / 3-6. slice ; 

let fruits = ["사과", "바나나", "오렌지"];         / let fruits = ["사과", "바나나", "오렌지"];

fruits.splice(1, 1, "포도");                               / let slicedfruits = fruits.slice(1, 2);

console.log(fruits);                                        / console.log(slicedfruits);

['사과', '포도', '오렌지']                                     / ['사과','바나나']      

; 1번째요소 부터 , 1개 삭제 후, 포도 넣기             / ;0번째 요소부터, 2번째 요소 전까지 만들어서 반환해줘