참조형타입은 값을 직접 가지지 않고 해당 값이 저장된 메모리 주소를 가리킴.
let original = ['Apple', 'Banana', 'Cherry'];
let shallowCopy = original;
shallowCopy[1] = 'Blueberry';
console.log(original); // ['Apple', 'Blueberry', 'Cherry']
console.log(shallowCopy); // ['Apple', 'Blueberry', 'Cherry']
깊은복사(Deep Copy)
: 깊은 복사는 배열의 모든 요소를 새로운 배열에 복사하여 원본배열과 복사된 배열이 다른 객체를 참조하여 한 배열을 수정해도 다른 배열에 영향을 미치지 않음
function deepCopy(o) {
var result = {};
if (typeof o === "object" && o !== null)
for (i in o) result[i] = deepCopy(o[i]);
else result = o;
return result;
}
const obj1 = {
a: 1,
b: [1, 2, 3]
};
var obj2 = deepCopy(obj1);
console.log(obj1 === obj2);
console.log(obj1);
console.log(obj2);
let original = ['Apple', 'Banana', 'Cherry'];
let deepCopy = JSON.parse(JSON.stringify(original));
deepCopy[1] = 'Blueberry';
console.log(original); // ['Apple', 'Banana', 'Cherry']
console.log(deepCopy); // ['Apple', 'Blueberry', 'Cherry']
let fruits = ['Apple', 'Banana', 'Cherry'];
fruits.splice(1, 1, 'Blueberry');
console.log(fruits); // ['Apple', 'Blueberry', 'Cherry']
let fruits = ['Apple', 'Banana'];
let moreFruits = ['Cherry', 'Date'];
let allFruits = fruits.concat(moreFruits);
console.log(allFruits); // ['Apple', 'Banana', 'Cherry', 'Date']
: 객체 메서드는 객체의 속성에 접근하거나 객체를 조작함
let target = { name: 'John' };
let source = { age: 30, city: 'New York' };
let returnedTarget = Object.assign(target, source);
console.log(target); // { name: 'John', age: 30, city: 'New York' }
console.log(returnedTarget); // { name: 'John', age: 30, city: 'New York' }
: HTML 문서를 구조화 해놓은 객체
const parent = document.getElementById('parent');
const newNode = document.createElement('div');
const referenceNode = document.getElementById('child');
parent.insertBefore(newNode, referenceNode);
const parent = document.getElementById('parent');
const newChild = document.createElement('div');
const oldChild = document.getElementById('child');
parent.replaceChild(newChild, oldChild);
const element = document.getElementById('myElement');
element.setAttribute('class', 'newClass');
: 약속을 의미하고 Javascript에서 비동기 작업의 완료 또는 실패를 나타내는 객체
const promise = new Promise((resolve, reject) => {
const success = true; // 작업 성공 여부를 나타내는 예시 변수
if (success) {
resolve("작업 완료");
} else {
reject("작업 실패");
}
});
promise
.then(result =>{
console.log("result")
.catch(error =>{
console.error(error);
})
const fetchData = new Promise((resolve, reject) => {
setTimeout(() => resolve("데이터 가져오기 완료"), 1000);
});
fetchData
.then(result => {
console.log(result);
return new Promise((resolve, reject) => {
setTimeout(() => resolve("두 번째 작업 완료"), 1000);
});
})
.then(result => {
console.log(result);
})
.catch(error => {
console.error(error);
});
async 를 이용하여 비동기 함수로 만들고 await 키워드를 사용하여 프로미스가 해결될 때 까지 기다림.
가독성이 높아지는 것이 장점
: 프로미스를 항상 반환한다.
async function myAsyncFunction(){
return "1차 작업";
myAsyncFunction().then(result => {
console.log(result);
: await은 프로미스가 해결될 때 까지 비동기 함수를 실행 중단한다.
async안에서만 사용가능
async function fetchData(){
const response = await fetch("url주소");
const data = await response.json();
console.log(data);
}
fetchData();
try catch문 사용
async function fetchData() {
try {
const response = await fetch("~");
if (!response.ok) {
throw new Error("네트워크 응답이 올바르지 않습니다.");
}
const data = await response.json();
console.log(data);
} catch (error) {
console.error("에러 발생:", error);
}
}
fetchData();
: 비동기 작업을 동시에 처리하고 기다릴 때는 Promise.all 사용가능
async function fetchMultipleData() {
try {
const [data1, data2] = await Promise.all([
fetch("~").then(res => res.json()),
fetch("~").then(res => res.json())
]);
console.log(data1, data2);
} catch (error) {
console.error("에러 발생:", error);
}
}
fetchMultipleData();
https://example.com/path/to/resource?query=string
https
example.com
/path/to/resource
?query=string
fetch함수 예시
fetch(url)
.then(response => response.json())
.then(data =< console.log(data))
.catch((error) => console.error(error));
fetch(url)
: 지정된 URL로 네트워크 요청을 보낸다..then(response => response.json())
: 응답을 JSON 형식으로 파싱.then(data => console.log(data))
: 파싱된 데이터를 처리.catch(error => console.error("Error:", error))
: 요청 중 발생한 에러를 처리: fetch 함수는 두 번째 인수로 옵션 객체를 받을 수 있다. 이를 통해 HTTP 메서드, 헤더, 바디 등을 설정할 수 있다.
fetch("~", {
method: "POST", // HTTP 메서드
headers: {
"Content-Type": "application/json" // 요청 헤더
},
body: JSON.stringify({
title: "새 작업",
completed: false
}) // 요청 본문
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Error:", error));
method
: HTTP 메서드를 설정 (예: GET, POST, PUT, DELETE)headers
: 요청 헤더를 설정 (예: Content-Type)body
: 요청 본문을 설정 주로 POST나 PUT 요청에서 사용