2025. 1. 16. 23:24ㆍJS
08장 제어문
블록문
{} 이렇게 , 객체랑 헷갈리면 안됨
조건문 if..else, switch /반복문 for, while, do...while, /break문/continue문
09장 타입 변환과 단축 평가
명시적타입변환
빌트인 메서드 같은 것들
String( ) , toString( ), Number( ) , parseInt( ), parseFloat( )
암묵적 타입변환
1 + '1 ' // '11'
!1 // false
falsy 한 값 : NaN, 0, ' ', null, false, undefined,
단축 평가 : 표현식을 평가하는 도중에 평가 결과가 확정된 경우 나머지 평가 과정을 생략하는 것
ex) && , ||, .?(옵셔널 체이닝 연산자) 와 ?? (null 병합 연산자)
단축평가를 사용해서 if문이나, 삼항연산자 처럼 활용 가능
10장 객체 리터럴
객체 : 0개 이상의 프로퍼티로 구성된 집합, 프로퍼티는 키와 값으로 구성
프로퍼티 : 객체의 상태를 나타내는 값
메서드 : 프로퍼티(상태의 데이터)를 참조하고 조작할 수 있는 동작
var number= {
num : 0, <ㅡ 프로퍼티 키 : num, 값 : 0
increase ( ) { num ++ } <ㅡ 메서드(축약형)
increase : function ( ) { num ++ } 메서드(원본) 이걸 축약하면 위에 형태임.
} ;
자바스크립트 함수는 일급객체이므로 값으로 취급 그래서 프로퍼티 값으로 가능
일급객체
무명의 리터럴로 생성가능, 변수나 자료구조에 저장가능, 함수 매개변수나 반환 값 가능.
객체 생성 방법
객체 리터럴, object 생성자 함수, 생성자 함수, object.create 메서드, 클래스
프로퍼티 '키' 동적 생성 방법
var obj = { [key] : 'sam' }
프로퍼티 접근 : 마침표, 대괄호 표기법
ex) var person = { name : ' lee' }
person.name // person['name']
프로퍼티
값 갱신
person.name = 'kang' // {name : 'kang'}
동적생성
person.age = 20 // {name : 'kang' , age : 20}
삭제
delete person.age // {name : 'kang'}
11장 원시 값과 객체의 비교
원시 값 : 변경 불가능한 값 , 메모리에 값이 저장 , 한 단계만 거쳐감
객 체 : 변경 가능한 값 , 메모리에 참조 값이 저장, 한 단계 "더" 거쳐감
값에 의한 전달, 참조에 의한 전달은
식별자가 기억하는 메모리 공간에 저장되어 있는 값을 복사해서 전달한다는 면에서 동일.
다만, 식별자가 기억하는 메모리 공간, 즉 변수에 저장되어 있는 값이
원시 값이냐, 참조 값이냐의 차이만 있을 뿐이다.
따라서 자바스크립트에는 "참조에 의한 전달"은 존재하지 않고 "값에 의한 전달"만이 존재.
변경 불가능하다는 것은 변수가 아니라 값에 대한 진술임
상수와 변경 불가능한 값을 동일시 하면 x
const는 재할당 금지된 변수일 뿐
ex) const a = { }
할당한 원시 값은 변경 불가하지만, 객체를 할당 할 경우 객체는 변경가능.
원시 값의 경우
독립적 변수 : num과 count는 각자 자신의 메모리 주소를 참조함, 서로 영향x
불변성 : 원시 값은 변경되지 않으며, 변경이 필요한 경우 새롭게 값을 생성하고 메모리 공간을 할당받음
ex) var num = 5
var count = num
메모리
0x0001 num -> 0x0002
0x0002 5
0x0003 count -> 0x0002
num(5) === count(5) //true
num = 8 이라면,
0x0003 count -> 0x0002
0x0004 8
0x0001 num -> 0x0004
num(8) === count(5) // false
객체의 경우
ex) var person = {
name : 'kang'
};
메모리
0x0001 person -> 0x0002
0x0002 { } -> 0x0003 ~ ?
{ 0x0003: name -> 0x00059 }
0x00059 'kang'
people = person 이라고 하면
메모리
0x0001 person -> 0x0002
0x0002 { } -> 0x0003 ~ ?
{ 0x0003: name -> 0x00059 }
0x00059 'kang'
0x00060 people -> 0x0002
0x0002 { } -> 0x0003 ~ ?
{ 0x0003: name -> 0x00059 }
이 상태가 되고
person.name = 'kim' 으로 바꾸면
메모리
0x000061 kim
0x0001 person -> 0x0002
0x0002 { } -> 0x0003 ~ ?
{ 0x0003: name -> 0x00061 }
0x00060 people -> 0x0002
0x0002 { } -> 0x0003 ~ ?
{ 0x0003: name -> 0x00061 }
person의 값을 바꿨는데 people의 값도 같이 바뀜
0x0002 같은 { }의 메모리주소를 참조하고 있어서
객체의 내부 값이 바뀌면 영향을 받음
얕은 복사의 경우 (불변성 보장x)
최상위 프로퍼티(직접적인 값)는 복사되어 새 객체를 생성
참조형 데이터(배열, 객체)는 기존 메모리 주소를 그대로 참조
즉, 객체 안의 객체(중첩 객체)는 여전히 기존 객체의 참조 유지
깊은 복사의 경우 (불변성 보장)
중첩 객체를 포함한 모든 데이터를 완전히 독립된 객체로 복사
즉, 중첩된 구조까지 새로운 메모리 주소를 생성하기 때문에, 원본 객체와 완전히 독립적
'JS' 카테고리의 다른 글
DeepDive JS - 5일차 // 18 - 19장 (0) | 2025.01.21 |
---|---|
DeepDive JS - 3일차 // 12,13,23장 (1) | 2025.01.17 |
DeepDive JS - 1일차 // 04장 ~07장 (1) | 2025.01.15 |
deep js - 7일차 (0) | 2024.05.23 |
deep js - 6 일차 (0) | 2024.05.23 |