| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- JavaScript
- DB
- 자바스크립트
- nodemailer
- JSON.parse
- TypeScript
- 이메일 전송
- AGGREGATE
- 카카오 소셜로그인
- MongoDB
- nextjs
- 카카오로그인
- 위크맵
- 참조에 의한 객체 복사
- 캐러셀
- 위크셋
- Map
- Mongoose
- javacript
- context switch
- 중첩 구조 분해
- JSON.stringify
- 화살표 함수
- nest
- 구조 분해 할당
- react-slick
- 로그스태시
- logstash
- nestjs
- 객체
- Today
- Total
목록Language/JavaScript (46)
뚜sh뚜sh
이걸 사용했을 때 android webview와 web에서는 사용할 수 없었음 [사용법] { if (navigator.share) { navigator .share({ title: "hi", // 제목 text: "hello", // 카카오톡으로 공유했을 때 텍스트에 입력한 내용이 카카오톡으로 따로 보내짐 url: "https://naver.com", // 해당 url을 카카오톡으로 보냄, 빈 값을 보내면 내가 공유하기를 누른 페이지의 url이 보내짐 }) .then(() => alert("성공")) .catch((err) => alert(err)); } else alert("실패"); }} > 버튼
원래 배열이 arr이라고 할 때, 이 배열을 깊은 복사하려면 아래 코드처럼 하면 됨 let sortArr = arr.slice() 단, 배열 안에 또 배열이 들어 있는 경우는 얕은 복사가 됨
재귀 - 문제 해결을 하다 보면 함수에서 다른 함수를 호출해야 할 때가 있는데 이때 함수가 자기 자신을 호출하면 재귀라고 부름 실행 컨텍스트와 스택 - 실행 중인 함수의 실행 절차에 대한 정보는 해당 함수의 실행 컨텍스트(execution context)에 저장됨 - 실행 컨텍스트는 함수 실행에 대한 세부 정보를 담고 있는 내부 데이터 구조임 - 제어 흐름의 현재 위치, 변수의 현재 값, this의 값 등 상세 내부 정보가 실행 컨텍스트에 저장됨 - 함수 호출 1회당 정확히 하나의 실행 컨텍스트가 생성됨 함수 내부에 중첩 호출이 있을 때는 아래와 같은 절차가 수행됨 - 현재 함수의 실행이 일시 중지됨 - 중지된 함수와 연관된 실행 컨텍스트는 실행 컨텍스트 스택(execution context stack)..
JSON.stringify - JSON(JavaScript Object Notation) : 값이나 객체를 나타내주는 범용 포맷, RFC 4627 표준에 정의되어 있음 - 본래 자바스크립트에서 사용할 목적으로 만들어진 포맷이나 다른 언어에서 데이터 교환 목적으로 사용하는 경우도 많음 - 순환 참조가 있으면 원하는 대로 객체를 문자열로 바꿀 수 없음 JSON.stringify : 객체를 JSON으로 바꿔줌 JSON.parse : JSON을 객체로 바꿔줌 - JSON으로 인코딩된 객체는 일반 객체와 다른 특징을 보임 문자열은 큰따옴표로 감싸야 함, JSON에선 작은따옴표나 백틱을 사용할 수 없음 객체 프로퍼티 이름은 큰따옴표로 감싸야 함 replacer로 원하는 프로퍼티만 직렬화하기 - value : 인코딩..
객체 생성하기 new Date() let now = new Date(); alert( now ); // 현재 날짜 및 시간이 출력됨 new Date(milliseconds) - UTC 기준 1970년 1월 1일 0시 0분 0초에서 milliseconds 밀리초(1/1000초) 후의 시점이 저장된 Date 객체가 반환됨 - 1970년의 첫날을 기준으로 흘러간 밀리초를 나타내는 정수는 타임스탬프라고 부름 new Date(datestring) let date = new Date("2017-01-26"); alert(date); // 인수로 시간은 지정하지 않았기 때문에 GMT 자정이라고 가정하고 // 코드가 실행되는 시간대(timezone)에 따라 출력 문자열이 바뀝니다. // 따라서 얼럿 창엔 // Thu ..
구조 분해 할당(destructuring assignment) - 객체나 배열을 변수로 '분해'할 수 있게 해주는 특별한 문법 - 구조 분해 할당이란 명칭은 어떤 것을 복사한 이후에 변수로 '분해(destructurize)' 해준다는 의미 때문에 붙여짐 - 이 과정에서 분해 대상은 수정 또는 파괴되지 않으며, 배열의 요소를 직접 변수에 할당하는 것보다 코드 양이 줄어든다는 점만 다름 - 배열뿐만 아니라 모든 이터러블에 구조 분해 할당을 적용할 수 있음 - 두 변수에 저장된 값을 교환할 때 구조 분해 할당을 사용할 수 있음 배열 분해하기 // 이름과 성을 요소로 가진 배열 let arr = ["Bora", "Lee"] // 구조 분해 할당을 이용해 // firstName엔 arr[0]을 // surname..
Object.keys, values, entries - 일반 객체에는 다음과 같은 메서드를 사용할 수 있음 Object.keys(obj) : 객체의 키만 담은 배열을 반환함 Object.values(obj) : 객체의 값만 담은 배열을 반환함 Object.entries(obj) : [키, 값] 쌍을 담은 배열을 반환함 Map, Set, Array 전용 메서드와 일반 객체용 메서드의 차이를 비교해보자 맵 객체 호출 문법 map.keys() Object.keys(obj) ( obj.keys() 아님) 반환 값 iterable 객체 '진짜' 배열 객체 변환하기 - 객체에는 map, filter 같은 배열 전용 메서드를 사용할 수 없음 - 하지만 Object.entries와 Object.fromEntries 를..
위크맵 - 맵과 위크맵의 첫 번째 차이는 위크맵의 키가 반드시 객체여야 한다는 점임 - 원시값은 위크맵의 키가 될 수 없음 - 맵과 위크맵의 두 번째 차이는 위크맵은 반복 작업과 keys(), values(), entries() 메서드를 지원하지 않음, 따라서 위크맵에선 키나 값 전체를 얻는 게 불가능 - 이렇게 적은 메서드만 제공하는 이유는 가바지 컬렉션의 동작 방식 때문(동작 시점을 정확히 알 수 없어서) let weakMap = new WeakMap(); let obj = {}; weakMap.set(obj, "ok"); //정상적으로 동작합니다(객체 키). // 문자열("test")은 키로 사용할 수 없습니다. weakMap.set("test", "Whoops"); // Error: Invalid..
맵(Map) - 맵은 키가 있는 데이터를 저장한다는 점에서 객체와 유사함 - 다만, 맵은 키에 다양한 자료혀을 허용한다는 점에서 차이가 있음 - map[key]는 map을 일반 객체처럼 취급하게 되기 때문에 set, get 등을 사용해야함 - 맵은 객체를 키로 허용함 - 맵은 삽입 순서를 기억함 맵에는 다음과 같은 주요 메서드와 프로퍼티가 있음 new Map() : 맵을 만듬 map.set(key, value) : key를 이용해 value를 저장함 map.get(key) : key에 해당하는 값을 반환함, key가 존재하지 않으면 undefined를 반환함 map.has(key) : key가 존재하면 true, 존재하지 않으면 false를 반환함 map.delete(key) : key에 해당하는 값을 ..
iterable 객체 - 반복 가능한 객체는 배열을 일반화한 객체임 - 이터러블이라는 개념을 사용하면 어떤 객체에든 for..of 반복문을 적용할 수 있음 - 배열은 대표적인 이터러블임 - 문자열 역시 이터러블의 예임 Symbol.iterator - 직접 이터러블 객체를 만들어보자 - for..of를 적용하기에 적합해 보이는 배열이 아닌 객체를 만들어보자 let range = { from: 1, to: 5 }; // 아래와 같이 for..of가 동작할 수 있도록 하는 게 목표입니다. // for(let num of range) ... num=1,2,3,4,5 - range를 이터러블로 만드려면 객체에 Symbol.iterator 라는 메서드를 추가해 아래와 같은 일이 벌어지도록 해야 함 1. for..o..