목록JavaScript (50)
dolog
JS는 숫자를 나타내는 두가지 자료형을 지원한다 일반적인 숫자는 ‘배정밀도 부동소수점 숫자(double precision floating point number)’로 알려진 64비트 형식의 IEEE-754에 저장된다 임의의 길이를 가진 정수는 bigint 숫자로 나타낼 수 있다 (일반적인 숫자로는 253 이상 -253 이하는 사용할 수 없어서 만들어짐) 숫자를 입력하는 다양한 방법 ‘e’ let billion = 1000000000; // 0을 많이 사용하다보면 실수가 생길 수 있다 let billion = 1e9 // 10억, 1과 9개의 0 console.log(7.3e9); // 73억 e 왼쪽에 있는 수에 e 오른쪽에 있는 수 만큼 10의 거듭제곱을 곱해준다 le3 = 1 * 1000; 1.23e..
JS에선 원시값에서도 객체처럼 매서드 호출이 가능 그러나 객체처럼 프로퍼티를 추가할 수 없다(비 엄격모드에서 래퍼 객체를 만들어도 래퍼 객체는 금방 삭제되기 때문에...) 원시값 vs 객체 원시값) 원시형 값 종류 : string, number, bigint, boolean, symbol, null, undefined(7가지) 객체) 프로퍼티에 다양한 종류의 값 저장가능 대괄호 { } 를 사용하여 만들 수 있으며 JS에선 함수도 객체의 일종이다 함수를 프로퍼티로 저장할 수 있다는 장점 let gustn = { name: “kim”, sayHi: function() { console.log(“Hi~”); } }; gusts.sayHi(); // Hi~ JS 내장 객체 : 날짜, 오류, HTML 요소 등의 ..
객체끼리의 연산과 출력? 객체는 원시값으로 변환되고, 그 후 의도한 연산이 진행된다 객체는 논리 평가 시 true 반환 ➡️ 숫자형 또는 문자형 숫자형으로의 변환 : 빼는 연산, 수학 관련 함수를 적용할 때 ex) date1 - date2 = 두 날짜의 시간 차이가 반환 문자형으로의 변환 : console.log(obj), alert(obj) 같이 출력할 때 변환 ToPrimitive 특수 객체 매서드를 사용해 숫자형 또는 문자형으로 형 변환을 자유롭게 조절할 수 있다 ‘hint’(구분 기준) : 목표로 하는 자료형(명세서에 자세한 설명 참고하기) ㄴ “string” : alert 함수같이 문자열을 기대하는 연산 수행 시 hint ➡️ string (object ➡️ string) ㄴ “number” :..
JS에선 객체 프로퍼티 key로 오직 문자형 또는 심볼형만 허용한다 심볼(symbol) 유일한 식별자(unique identifier) Symbol() 을 사용하면 심볼값을 만들 수 있다 원시형 데이터 // id는 새로운 심볼이 된다 let id = Symbol(); 심볼을 만들 때 설명을 붙일 수 있으며 디버깅 시 아주 유용하다 // 심볼 id에는 “id” 라는 설명이 붙는다, 이름표 역할 let id = Symbol(“id”); 설명이 동일한 심볼이라도 각 심볼값은 다르다 let id1 = Symbol(“id”); let id2 = Symbol(“id”); console.log(id1 == id2); // false 심볼은 문자형으로 자동 형 변환 X JS에선 alert 함수 처럼 모든 값을 인자로 ..
옵셔널 체이닝(optional chaining) ?. - 프로퍼티가 없는 중첩 객체에 에러 없이 접근할 수 있다 옵셔널 체이닝이 필요한 이유 기존 몇가지 사례를 보자면 1)프로퍼티를 가지지않은 객체에 접근할 때 생기는 에러 2)페이지에 존재하지 않는 요소에 접근해 정보를 가져오려 했을 때 생기는 에러 ⬇️ 중첩객체의 특정 프로퍼티에 접근하기 위한 구성요소들을 && 연산자로 묶어 해당 객체나 프로퍼티가 있는지 확인했었다 console.log(user && user.address && user.address.street); // undefined 다만 이렇게 && 연산자를 사용하게 되면 코드가 길어진다 옵셔널 체이닝의 등장 - ?. 앞에 평가 대상이 undefined or null ➡️ undefined 로..
객체 생성 목적 : 사용자(user), 주문(order) 등 실제 존재하는 개체(entity)를 표현하고자 할 때 생성된다 ex) let user = { name: “Kim”, age: 26 }; 현실에서 장바구니에서 물건 선택하기, 로그인 & 로그아웃 하기처럼 user를 나타내는 객체 user도 특정한 행동을 할 수 있다 JS에선 객체 프로퍼티에 함수를 할당 ➡️ 행동 능력 부여 매서드 만들기 ex) 객체 user가 인사할 수 있도록 해보자 let user = { name: “Kim”, age: 26 }; user.sayHi = () => { // let 선언을 할 필요가 없는게 이미 앞에서 선언했기떄문 alert(“Hi”); }; user.sayHi(); // Hi 예시처럼 객체 프로퍼티에 할당된 함..
연결된 객체 let marry = (man, woman) => { woman.husband = man; man.wife = woman; return { // 새로운 객체 반환 father: man, mother: woman } } let family = marry({ name: “Kim” }, { name: “Shim” }); father과 mother.husband를 지우면 ⬇️ delete family.father; delete family.mother.husband; 둘 중 하나만 삭제해도 모든 객체는 여전히 도달 가능한 상태지만 두개 모두 지우면 Kim으로 들어오는 참조는 모두 사라져 도달 가능한 상태가 X ➡️ 메모리 삭제 즉, 외부에서 들어오는 참조만이 도달 가능한 상태에 영향을 준다 !! 결..
우리가 만드는 모든 것은 메모리를 차지한다 더는 쓸모 없게 된 것들을 어떻게 처리할까? 가비지 컬렉션 기준 JS는 도달 가능성(reachability) 라는 개념을 사용해 메모리 관리 도달 가능한 값 : 어떻게든 접근하거나 사용할 수 있는 값 도달 가능한 값은 메모리에서 삭제 되지 않는다 가비지 컬렉터(garbage collector)가 끊임 없이 동작하여 모든 객체 모니터링, 도달 가능 X 객체 삭제 고정 도달 가능 값(root) / 현재 함수의 지역 변수와 매개변수 / 중첩 함수의 체인에 있는 함수에서 사용되는 변수와 매개변수 / 전역 변수 / etc. root가 참조하는 값 또는 체이닝으로 루트에서 참조할 수 있는 값 ➡️ 도달 가능한 값 ex) 전역 변수에 객체 저장 ➡️ 객체의 프로퍼티가 또 다..