728x90
수업내용 정리 (VSCode - JS)
1. Json
<script>
const user = {
name: 'kim',
age: 30,
emails: ['thekim@gmail.com', 'neo@naver.com']
}
console.log(user)
// const str=JSON.stringify(user)
// console.log('str', str);
// console.log(typeof str);
// const obj=JSON.parse(str)
// console.log('obj', obj);
//개발자도구 application
//로컬스토리지- 사이트에 종속된 반영구 데이터 저장소
//세션스토리지- 페이지 닫으면 사라지는 데이터 저장소
//setItem은 값을 문자로 저장해야 한다.
//localStorage.setItem('user',user) //user객체를 문자화해야 한다.
localStorage.setItem('user', JSON.stringify(user))
//console.log(localStorage.getItem('user'))
console.log('jsObj:', JSON.parse(localStorage.getItem('user')))
//localStorage.removeItem('user')
//localStorage 데이터 수정
const str = localStorage.getItem('user')
const obj = JSON.parse(str)
obj.age = 22
console.log(obj);
localStorage.setItem('user', JSON.stringify(obj))
</script>
2. 구조 분해 할당
<script>
//구조 분해 할당(Destructuring assignment)
//비구조화 할당
const user = {
name: 'kim',
age: 30,
email: 'thekim@gmail.com'
}
//let name=user.name
//let age=user.age
//let email=user.email 불편함..
//속성이 많을 때 필요한것만 순서상관없이 추출시 유리
//address속성값이 없다면 'Korea'가 기본값이 된다.
const {
age,
name: irum,
address = 'Korea'
} = user
console.log(age)
console.log(name)
//위를 구조분해할당 없이 추출해서 age, name변수에 저장해 볼것
console.log(`사용자의 이름은 ${irum}입니다`);
console.log(`${irum}의 나이는 ${age}세입니다`);
console.log(`${irum}의 이메일은 ${user.mail}입니다`);
console.log(address);
showNameAgeInfo(user)
function showNameAgeInfo({
name,
age
}) {
console.log(`name=${name}, age=${age}`);
}
const fruits = ['Apple', 'Banana', 'Cherry']
//fruits가 배열이므로 []로 구조분해할것
//const [a,b,c,d='Mango']=fruits //순서대로 추출함
//console.log(a,b,c,d) //Apple Banana Cherry undefined
// const [,b]=fruits //두번째요소 Banana만 추출함
// console.log(b) //Banana
const [, , b] = fruits //세번째요소 Cherry만 추출함
console.log(b) //Cherry
</script>
3. 전개 연산자
<script>
//전개 연산자(Spread)
const fruits = ['Apple', 'Banana', 'Cherry', 'Orange']
console.log(fruits)
console.log(...fruits)
//console.log('Apple','Banana', 'Cherry')와 동일하게 호출
//c(last매개변수)는 ['Cherry','Orange'] 인자를 받는다
// function toObject(a,b,...c){
// return{
// //a: a, b: b, c: c
// a, b, c //키,값변수가 같으면 1번만 명시해도 됨
// }
// }
const toObject = (a, b, ...c) => ({
a,
b,
c
})
console.log(toObject(...fruits)); //호출 인자가 많을 때 유리함
//console.log(toObject(fruits[0],fruits[1],fruits[2],fruits[3])); 와 동일하게 호출
</script>
4. 불변성
<script>
//데이터 불변성(Immutability)
//원시 데이터 : String, Number, Boolean, undefined, null
//(값이 같으면 같은 참조값을 갖는다.)
//(결국, 원시 데이터는 참조값보다는 상수처럼 이해하면 된다.)
//참조형 데이터: Object, Array, Function
//(참조형은 불변성이 없다.)
//(결국, 참조형의 새로운 객체는 새로운 참조값을 갖는다. )
//----------------------------------------------
//1번지: 2번지: 3번지: 4번지:
//----------------------------------------------
// let a=1
// let b=4
// console.log(a,b, a===b)
// b=a //참조값이 복사된다.
// console.log(a,b, a===b)
// b=7 //7의 참조값이 복사된다.
// console.log(a,b, a===b)
// let c=1
// console.log(a,b, b===c)
let a = {
k: 1
}
let b = {
k: 1
}
console.log(a, b, a === b)
a.k = 7
b = a //객체값복사가 아니라 참조값이 복사된다.(주의)
console.log(a, b, a === b)
a.k = 2 //b객체의 k속성값도 2로 변경되니 주의하자.
console.log(a, b, a === b)
let c = b
console.log(a, b, c, a === c)
a.k = 9
console.log(a, b, c, a === c)
</script>
5. 얕은 복사와 깊은 복사
<script>
//얕은 복사(Shallow copy), 깊은 복사(Deep copy)
const user = {
name: "kim",
age: 40,
emails: ['thekim@gmail.com']
}
//const copyUser =user //얕은복사
//const copyUser =Object.assign({}, user) //깊은복사
let copyUser = {
...user
} //전개연산자 활용 깊은복사같지만 emails는 얕은복사가 된다.
let copyUser = {
name: user.name,
age: user.age,
email: user.emails
}
console.log(copyUser)
console.log(copyUser === user) //false 깊은 복사
console.log(copyUser.email === user.emails) //true 그러나 emails는 얕은복사
user.age = 22
console.log('user', user)
console.log('copyUser', copyUser)
console.log('-------------');
console.log('-------------');
user.emails.push('neo@naver.com')
console.log(user.emails, copyUser.emails); //얕은복사이므로 같은요소값이 출력됨
console.log('user', user);
console.log('copyUser', copyUser);
//deep copy는 lodash 라이브러리의 cloneDeep()를 이용해서 쉽게 할수 있지만
//실력을 위해 직접구현해 보자
copyUser = {}
deepCopy(user, copyUser)
console.log('deepCopy call after')
console.log(user.emails === copyUser.emails); //깊은복사가 되어 false
user.emails.push('xxx@naver.com')
console.log('user', user); //['thekim@gmail.com','neo@naver.com','xxx@naver.com']
console.log('copyUser', copyUser); //['thekim@gmail.com','neo@naver.com']
function deepCopy(source, target) {
target.name = source.name
target.age = source.age
target.emails = []
//문제> source.emails 배열의 값을 순차적으로 target.emails배열로 복사하시오
for (let email of source.emails) {
target.emails.push(email)
}
//source.emails.forEach(email => target.emails.push(email));
//target.emails.push(...source.emails)
}
</script>
- 37일차는 오후에 조퇴를 하는 바람에 일지가 없다.
728x90
'프로그래밍 > 수업일지' 카테고리의 다른 글
수업일지 47일차 (23/11/24) (0) | 2023.11.25 |
---|---|
수업일지 42일차 (23/11/17) (0) | 2023.11.17 |
수업일지 36일차 (23/11/9) (7) | 2023.11.09 |
수업일지 35일차 (23/11/8) - VSCode (CSS) (0) | 2023.11.08 |
수업일지 34일차 (23/11/7) (0) | 2023.11.07 |