strict mode라 불리는 엄격 모드는 기존 자바스크립트 언어의 일부 기능을 제한하고 엄격하게 문법 검사를 하기 때문에 기존에는 넘어갔던 에러들을 확인할 수 있습니다. strict 모드 설정 strict 모드 설정은 스크립트와 함수에서 선언을 할 수 있습니다. 1) 스크립트에서 선언 "use strict"; // code ... 2) 함수에서 선언 function foo () { "use strict"; // code ... } strict 모드 특징 대상 제한 사항 변수 선언되지 않은 변수나 객체를 사용할 수 없음. eval() 함수 내에서 선언된 변수는 외부에서 사용할 수 없음. 프로퍼티 읽기 전용 프로퍼티에는 대입할 수 없음. 한 프로퍼티를 여러 번 정의할 수 없음. 함수 함수를 구문이나 블록 ..
이전에 작성한 예외처리 글을 생각해 봅시다. 왜 예외처리를 하는 건가요? 바로 에러를 잡기 위해서입니다. 자바스크립트는 싱글스레드여서 에러가 발생하게 되면 서버가 죽는 경우를 많이 겪으실 텐데요. 그래서 우리가 마주할 다양한 에러 객체들과 어떤 방식으로 처리할 수 있는지 알아보도록 하겠습니다. new Error() 우리가 코드를 짜다보면 가장 많이 만나는 SyntaxError, TypeError, ReferenceError 이 삼대장 기억하시나요? 에러는 기본적으로 javascript에서 코드를 읽고 동작을 하게 됐을 때 문제가 생기면 내장 에러 객체를 이용하여 에러를 우리에게 보여주게 됩니다. 하지만 에러는 우리가 직접적으로 만들 수도 있는데요. 바로 에러 객체를 통해서 만들 수 있습니다. 에러객체는 ..
비동기가 발생하는 다양한 경우가 존재하지만 백엔드에서 가장 많이 접하는 비동기는 바로 query를 사용할 때입니다. 비동기로 처리를 하면 처리 속도가 빨라지니까 무조건 사용하는 게 좋을까요? 비동기처리를 한다고 해서 무조건 다 좋은 것만은 아닙니다. 왜냐하면 비동기 처리 시에도 문제점이 존재하기 때문이죠. 그렇다면 어떤 문제가 발생을 할까요? let data; setTimeout(()=>{ data = 10 },1000) let value = data * 10 console.log(value) 비동기 동작을 위해서 setTimeout을 이용하여 data값을 입력받고 그 값으로 value 값을 구하는 코드를 작성을 해보았습니다. 이때 우리가 예상하는 value 값은 얼마인가요? 100이라고 생각할 수 있는..
비동기가 발생하는 다양한 경우가 존재하지만 백엔드에서 가장 많이 접하는 비동기는 바로 query를 사용할 때입니다. 비동기로 처리를 하면 처리 속도가 빨라지니까 무조건 사용하는 게 좋을까요? 비동기처리를 한다고 해서 무조건 다 좋은 것만은 아닙니다. 왜냐하면 비동기 처리 시에도 문제점이 존재하기 때문이죠. 그렇다면 어떤 문제가 발생을 할까요? let data; setTimeout(()=>{ data = 10 },1000) let value = data * 10 console.log(value) 비동기 동작을 위해서 setTimeout을 이용하여 data값을 입력받고 그 값으로 value 값을 구하는 코드를 작성을 해보았습니다. 이때 우리가 예상하는 value 값은 얼마인가요? 100이라고 생각할 수 있는..
Object를 이용한 객체 확인 const obj = {} const obj2 = {message : '안 빈 객체'} console.log(Object.keys(obj)) // [] console.log(Object.keys(obj2)) // ['message'] 여기 두 가지의 객체가 존재합니다. 첫 번째는 빈객체, 두 번째는 비어있지 않은 객체, 이 두 객체를 console.log로 찍어보면 첫 번째 객체는 빈 배열, 두 번째 객체는 message가 들어있는 배열이 나오는 걸 확인할 수 있는데요. 즉, 객체안의 key값을 받아오는 함수가 바로 keys입니다. (이 keys는 Object 뿐만 아니라 Map에서도 사용되니 참고하면 좋을것 같네요.) 배열 안에 들어가 있으니 우리는 이 배열의 길이를 잴..
ES6에서 도입된 find는 배열의 요소에 순회하면서 콜백함수를 호출하여 반환값이 true인 것을 찾는 것을 말합니다. 이때 true 값이면 첫 번째 요소를 반환하고, true 값이 없을 경우에는 undefined를 반환합니다. find가 없었을 때 코드 let result = ''; arr.forEach((v) => { if (v.id == id) { result = v; } }); forEach를 이용하여 조건절을 삽입해 값이 일치할 경우에 result에 값을 담아서 사용했었는데요 이때 find를 사용하면 조금 더 간편하게 코드를 짤 수 있습니다. find 활용 코드 let result = arr.find((f) => f.id == 0); find를 이용했을때 코드가 단순화된 걸 확인할 수 있는데요...
코드를 작성하다 보면 에러들을 많이 만나게 되는데요. 메모리부족이나 스택오버플로우 심각한 에러가 있는 반면에 수습 할 수 있는 심각도가 낮은 에러도 존재합니다. 이때 우리는 심각도가 낮은 에러를 예외 처리를 통해서 동작하지 않는 상황을 막을 수 있는데요. 지금부터 예외 처리를 어떻게 하는지 알아볼까 합니다. 기본적으로 예외처리를 어떻게 하는건지 얘기를 해봅시다. app.delete("/youtubers/:id", (req, res) => { let id = req.params.id; id = parseInt(id); const name = db.get(id).chennelTitle; db.delete(id); res.json({ message: `${name}님, 그동안 이용해 주셔서 감사했습니다.` }..
forEach와 map 함수는 기본적으로 형태와 동작원리가 같습니다. 그렇다면 무슨 차이가 있는 걸까요? forEach와 map함수에 대해서 알아봅시다. forEach와 map의 형태 const arr = [1,2,3,4] //arr.forEach(콜백함수(매개변수 value, index, array)) arr.forEach((value, index, array)=>{}) //arr.map(콜백함수) arr.map((value, index, array)=>{}) forEach와 map의 동작원리 foreach는 for문처럼 반복을 하는데 배열에서 요소 하나를 꺼낸 다음에 콜백함수 안의 코드들을 동작을 하게 됩니다. 즉 배열 각각의 인덱스에서 콜백함수 안의 코드를 반복을 한다는 뜻입니다. 그리고 콜백함수는..
함수의 형태는 크게 4가지가 있습니다. 일반함수 선언문 일반함수는 function을 사용하여 매개변수를 받을 수 있고, return을 통해 값을 반환할 수 있습니다. function func1(a, b){ return a + b } 일반함수 표현식 선언문의을 변수에 담아 사용하는 형태로 function의 이름이 변수명으로 나옵니다. const func2 = function(a, b){ return a + b } 화살표함수 ES6버전부터 추가 됐으며 function을 생략하고 괄호와 중괄호 사이에 화살표를 넣어서 표현을 합니다. const func3 = (a, b)=>{ return a + b } 화살표 함수의 리턴생략 화살표 함수사용을 할때 함수 안에 바로 return을 받으고 한 줄인 경우에는 중괄호와..