javascript 35

JS와 JSON의 undefined

옵셔널 체이닝을 공부하다가 예제를 보고 이해가 안되는 부분이 있어서 코드를 뜯어보았다. 분명 property를 반환하는 함수임에도 불구하고 계속 빈 객체를 반환하는 것이였다. 그래서 예제인 코드를 수정해서 검토해 본 결과, undefined를 인식하는 방법이 JS와 JSON에서 다르다는 것을 확인 할 수 있었다. ⚪ 예제 const rand = () => Math.random() rand() ? { prop1: rand() ? { prop2: rand() ? { prop3: rand() ? '성공!' : undefined } : undefined } : undefined } : undefined; const result = notSure(); cons..

TIL/JS 2023.04.02

옵셔널 체이닝

옵셔널 체이닝 연산자 ?. 는 네트워크에 요청하여 어떠한 데이터가 들어올지 모르는 상황에서 사용한다. 만약, prop3라는 property를 들어올 것을 기대했는데 막상 들어온 데이터에는 prop3라는 property가 없는 상황에서 접근한다면 에러가 발생한다. const rand = () => Math.random() rand() ? { prop1: rand() ? { prop2: rand() ? { prop3: rand() ? '성공' : undefined } : undefined } : undefined } : undefined; const result = notSure(); console.log(JSON.stringify(result)); co..

TIL/JS 2023.04.02

var

에러에 대해 참고하기위해 블로그를 찾아보다보면 var로 작성한 코드가 종종 보였고, 그럴때마다 해당 포스팅은 거르고 봤었다. 왜냐하면 var는 JS의 초창기에 썼던 키워드이기 때문에 오래전에 포스팅 했던 글이라는 것이라는 걸 파악할 수 있기 때문이다. var대신 현재 변수를 선언할 때 let과 const 상수를 사용하는데, 이는 var의 문제점을 발견하고 만들어냈기 때문이다. 공식 문서를 보아도 var를 쓰는 것을 지양한다는 문구를 확인 할 수 있다. 현재 쓰지 않음에도 불구하고, var에 대해 공부하는 이유는 1. 예전에 쓴 코드를 해석 할 때 필요하다. 2. 면접 시 var과 let, const의 차이에 대한 질문이 빈번히 나온다. ⚪ 선언 없이 사용 가능 var로 선언을 하지 않고 초기화를 설정하더..

TIL/JS 2023.04.02

에러 핸들링(4)_에러타입

에러타입에는 SyntaxError, TypeError, ReferenceError, RangeError 종류가 있다. 이 에러는 컴퓨터가 에러타입을 인지하여 해당 생성자함수를 통해 인스턴스를 만든다. 따라서, 인스턴스의 종류에 따라 표식, name, message를 새롭게 지정 해 줄 수 있다. const errorFuncs = [ () => {(3).split('');}, () => {hello();}, () => {(123.456).toFixed(-1);} ]; errorFuncs.forEach(func => { try{ func(); } catch (e) { if (e.name = TypeError) { console.error('자료형을 확인하세요.', e); return; } if (e inst..

TIL/JS 2023.04.01

에러 핸들링(3)_Error 속성 바꾸기

에러에는 name 앞에 붙는 표시, name, message, casue를 지정 할 수 있다. ⚪ 표식 바꾸기 name 앞에 붙는 표식은 Error의 인스턴스를 만들 때 프로퍼티로 들어가지 않는다. try...catch문에서 첫번 째 인자로 표식을 줄 수 있다. 직접 Error 생성자 함수를 통해 인스턴스를 만들 때는 표식을 지정 할 수 없다. ⚪ name 바꾸기 Error객체의 name의 default는 Error이다. 이 name은 Error의 static property로서 들어가 있다. 또한, Error Type에 따른 static property도 지정이 되어있어, 해당 Type의 에러가 발생 했을 경우, 이름이 Type으로 바뀐다. 이는 class에서 배웠듯이 부모 class가 static을 ..

TIL/JS 2023.04.01

에러 핸들링(1)

에러 핸들링의 중요성 JS에서 에러 핸들링은 중요하다. 이유는 인터프리터 언어이기 때문에, 사용자에게 배포 후 에러가 발생하면 큰 사고가 터지기 때문이다. 그래서 그 전에 개발자가 알아볼 수 있게 에러를 확인하고 처리를 하거나, 에러가 발생하지 않는 어떠한 상황에서 에러를 고의로 발생시켜 해당 상황이 나왔을 경우 해결방안을 설정 할 수 있다. ⚪ Error객체 에러가 났을 경우 생기는 객체가 Error의 객체이다. 컴퓨터 상으로 에러라고 인식하지 못하지만, 개발자가 에러로 인식하는 상황을 지정해서, Error임을 명시 할 수 있다. ⚪ Error타입과 Error타입의 인스턴스 기본 Error을 통해 만든 인스턴스 이외에 컴퓨터가 인식하는 Error에는 종류가 있다. 인식한 Error의 객체는, Error..

TIL/JS 2023.03.31

iterable, iterator

iterable은 요소를 순회하거나, 스프레드를 통해 얕은 복사를 하고, 디스트럭쳐링을 할 수 있기 때문에 유용한 타입이다. 메서드를 통해 이터러블 타입으로 변경을 할 수 있지만, 직접 이터러블의 객체를 만들 수 있다. 이터러블을 만들기 위해선 이터러블 규약을 지켜서 작성 해 주면 된다. ⚪ 이터러블 규약(iterable protocol) Array, String, Set, Map을 살펴보면, 내부에 [Symbol.iterator]함수가 있다. 이 함수는, 객체를 반환하는데, next() 라는 함수를 가지고 있다. next함수는 객체를 반환하는데, 반환된 객체는 value, done의 프로퍼티를 가지고 있다. ⭐ [Symbol.iterator] () : 객체반환(iterator 라고 부름) 객체(iter..

TIL/JS 2023.03.29

Map

Map은 Set과 함께 new 연산자를 통해 생성 할 수 있다. 초기에 배열로 감싸서 다수의 인자를 전달 할 수 있으며, [key, value]를 세트로 전달 해야 한다. Map.prototype.methods ⚪ set() 데이터를 추가 하는 함수이다. Set에서는 add를 사용하지만 Map에서는 set을 사용한다. 인자를 key, value로 전달 하는데, key만을 전달 할 경우 value는 undefined인 상태로 담긴다. set이 된 결과를 반환하기 떄문에 메서드 체이닝이 가능하다. 즉슨, 참조형 데이터 이기 때문에(Map 자체가 object) 변경하면 원본도 함께 변경된다. ⚪ get() Map에 해당 key가 있는 여부에 대해 불리언으로 반환한다. Set에는 has가 사용되지만 Map에는 ..

TIL/JS 2023.03.28

Set

Set에 관해 몇번 째 작성하는 블로그인지 모르겠다. 지식이 축적되면서 보이지 않던것이 보이는 거겠지..? 🤧 Set의 type은 object이다. 어찌보면 당연한 얘기이다. 배열의 type도 object이고, prototype이 Array이기 때문이다. Set의 prototype도 배열처럼 Set을 prototype으로 갖고 있는다. 즉슨, Set의 instance이다. Set은 객체의 형태로 담기며{}, 배열의 특징과 유사하다. 객체처럼 생겼으나, 배열과 비슷하다. Set은 중복 된 값을 같지 않는다. 하지만, 원시형 데이터 타입이 아닌 참조형 데이터 타입일 경우, 주소값이 담기기 때문에 중복되어 Set에 담길 수 있다. 하지만 값을 꺼내보거나, 수정, 삭제는 불가능하다. 밖에서 객체와 같은 값으로 ..

TIL/JS 2023.03.28

BigInt

JS에서 지원하는 최대 안정적인 정수 보다 큰 값을 담는 데이터 타입이다. Math.MAX_SAFE_INTEGER 보다 큰 값을 입력 했을 때, 무작위한 수가 담기는 것을 확인 할 수 있는데 이를 방지하기 위함이다. type은 bigint이다. BigInt 정의 방법 ⚪ 직접 숫자 뒤에 n을 명시한다. ⚪ BigInt() 연산자를 사용한다. BigInt의 특징 ⚪ BigInt연산자를 사용하면 뒤에 n이 붙는다. ⚪ bigint 타입끼리 연산을 할 수 있으나, 숫자끼리 연산은 불가능하다. ⚪ number와 bigint끼리 비교 할 수 있으나, 타입비교는 할 수 없다. ⚪ number와 bigint끼리 정렬을 할 수 있다. ⚪ bigint타입을 number타입으로 변환 시, 유실 될 수 있다. ⚪ bigin..

TIL/JS 2023.03.28