목록공부합시다/JavaScript (15)
공부혜옹
최근 구현중인 과제에서 세자릿수의 숫자를 사용자 표준입력으로 입력받는데 입력받은 값을 유효성 검사하고 예외처리 하는 과정에서 다시 알게된것을 포스팅한다 문제 상황 세자릿수를 입력받아야하기 때문에 특수문자나 문자가 입력되었을시 throw로 에러를 발생시켜주었는데 이 검사과정에서 나는 isNaN 함수를 사용하였다 if(isNaN(value)) throw ... isNaN의 파라미터로 숫자가 아닌 그 어떤값을 넘겨주어도 Number(value) 처리하여 숫자로 변환한다. 이 과정에서 숫자나 문자열이 아닌 경우는 숫자가 아니라는 뜻의 NaN(Not a Number)값을 갖게 되고, NaN이 되면 isNaN 함수는 true를 return 한다. 내가 넘겨준 value는 문자열이었는데 테스트시 ‘1c4’ 혹은 ‘4..
c++로 주로 알고리즘을 풀었기 떄문에 그래프 문제가 나오면 vector를 사용하여 풀었는데 js는 다양한 풀이방법이 많은것 같다. js로 풀이할땐 주로 객체에 삼항연산자를 사용하여 key와 value가 이미 있는지 체크하고 넣어주는 식으로 풀었는데 이에 더하여 concat과 reduce를 활용하여 푼 풀이가 있어서 공부해보았다 const edge = [ [3, 6], [4, 3], [3, 2], [1, 3], [1, 2], [2, 4], [5, 2], ]; const nodeObj = edge.reduce((Graph, [from, to]) => { Graph[from] = (Graph[from] || []).concat(to); Graph[to] = (Graph[to] || []).concat(fro..
5. 단축평가 5-1) 단축평가는 표현식을 평가하는 도중에 평가결과가 확정되는 경우 나머지 평가 과정을 생략하는 것이다 //결과: 'Cat' 'Cat' || 'Dog' // Cat(true)에서 이미 결과가 확정이되어 'Dog'는 평가하지않는다 5-2) 단축평가는 if문을 대체할 수 있다 if(true) foo = '트루'; -> foo = true && '트루'; if(!true) foo = '폴스'; -> foo = !true || '폴스'; 5-3) 단축평가 사용사례 5-3.1) 객체변수가 null인지 undefined인지 확인한 후 프로퍼티를 참조할때 //obj가 null 혹은 undefined이면 falsy값이므로 obj로 평가되고 값이 있을경우 onj.value로 평가된다 let obj = n..
4. 연산자 4-1) NaN은 자신과 일치하지않는 유일한 값이다 NaN은 === 대신 Number.isNaN 혹은 Object.is 빌트인 함수을 사용한다 4-2) typeof null은 null이 아닌 object라는 문자열을 반환한다 4-3) 지수연산자 ES7부터 지수연산자가 새로 도입되었다 기존에는 Math 함수를 사용하였다 Math.pow(2,2); // 기존 2 ** 2; //ES7 (-2) ** 2 //음수를 밑으로 사용하려면 괄호로 묶어야한다 2 * 5 ** 2 = 50 2 *= 2 //4 기존 이항연산자중에 우선순위가 가장 높다 할당연산자와 사용 가능하다
2.스코프 💡 함수레벨스코프 VS 블록레벨스코프 - 함수레벨은 함수를 기준으로 스코프 생성 ex. var - 블록레벨은 블록을 기준으로 스코프 생성 ex. let,const 렉시컬스코프(정적스코프) VS 동적스코프 렉시컬스코프는 함수를 어디에서 정의했는지에 따라 상위 스코프를 정의한다 동적스코프는 함수를 어디에서 호출했는지에 따라 상위 스코프를 정의한다 2-1) var키워드는 같은 스코프내에서 중복 선언이 가능하다 function(){ var foo = 1; var foo = 2; console.log(foo); //2 } 2-2) 모든 스코프는 하나의 계층적 구조로 연결된다 → 스코프체인 2-3) 자바스크립트는 렉시컬스코프를 따른다 3. let, const키워드와 블록레벨 스코프 3-1) var키워드와..
최근 면접준비를 위해 modern deep dive를 읽으며 js 기본 개념부터 탄탄히 하기위한 공부를 다시 하고있다 modern deep dive 포스팅은 무언가를 설명하기 보다 책을 읽으며 노션에 정리한 부분을 기록한다 1. 변수 1-1) 변수는 값이 아닌 메모리의 주소를 기억하고 있다 result = 30 의 경우 30이 저장되어있는 메모리의 주소 공간을 result라는 이름으로 부르겠다는 뜻이다. result를 호출할 경우 result에 해당하는 메모리 주소를 찾아가 그곳에 저장되어있는 값을 참조한다 1-2) 변수 선언은 값을 저장하기 위한 공간을 확보한다는 개념이다 선언 후 할당을 안해주었다면 undefined로 초기화 된다 undefined는 js의 원시타입(primitive 타입)이다 JS에..
1. 이름 정의 Arrow function 이름 정의 불가능 변수에 할당해서 사용 호이스팅이 일어나지 않는다 function 이름 정의 가능 변수에 할당없이 정의만으로 사용가능 변수 할당 없는 기명 함수 정의시 호이스팅이 일어난다 function의 호이스팅 //type 1 console.log(AnonymoustFunc()); // error const AnonymoustFunc = function(){ return 1; } //type 2 console.log(NamedFuncExpression()); // error const NamedFuncExpression = function NamedFunc(){ return 1; } //type 3 console.log(NamedFunc()); // 1 fu..
종종 공식문서를 읽다보면 parameter와 argument를 구분하지않고 그냥 읽는경우가 있는것 같다. 엄연히 둘은 구분되는 개념이다 parameter 함수 내부의 인자로, 함수 호출시 들어온 argument의 값이 이 parameter라는 변수에 담기게 된다 argument 함수를 호출할때 전달하는 실제 값이다 변수가 아닌 실제 값!! // parameter1은 매개변수로 argument의 값이 이 변수에 담겨 함수내에서 사용된다 const func = (parameter1) => { console.log("parameter1은 파라미터 변수"); } func(2); // 2는 함수에 전달되는 실제 값으로 argument이다