Study/JavaScript(Clean code)
[JavaScript][clean-code] eqeq줄이기 & 형 변환 주의하기
* eqeq란? - Equality(==) 동등연산자 * eqeq의 문제점은?? - 동등연산자를 사용하면 형 변환이 일어난다. (type casting) "1" == 1 // true 1 == true // true 따라서 엄격한 동등연산자를 사용해야한다. * eqeq문제점 해결방법 1. Strict equality(===) 엄격 동등연산자 "1" === 1 // false 1 === true // false 2. 형 변환을 수동으로 막아주기 Number(ticketNum.value) === 0 // true ticketNum.valueAsNumber === 0 // true 3. ESLint를 이용한다. * 형 변환시 주의 사항 - 자바스크립트가 형 변환을 할때는 암묵적인 변환을 해준다. - 사용자가 ..
[JavaScript][clean-code] 타입 검사
* 타입 검사에 대한 방법 typeof instanceof Object.prototype.toString.call('') * typeof - typeof연산자가 피연산자를 평가한뒤 문자열로 반환해준다. ex) typeof 'Hello' // 'string' * typeof의 문제점 primitive value는 대부분 typeof로 검사가 가능하나 reference value는 감별하기 어렵다. typeof null 'object'가 반환된다. 언어적인 오류이다. (수정할 수 없다고 판단되어 계속 사용되고 있음) typeof는 만능이 아니다. * instanceof (typeof와 유사) - 생성자의 prototype속성이 객체의 prototype chain어딘가에 존재하는지 판별한다. * instanc..
[JavaScript][clean-code] 호이스팅 주의하기
[참고] https://latte1114.tistory.com/357 * 호이스팅이란? - 런타임시(프로그램이 동작될때) 선언을 바로 최상단으로 끌어 올려주는것 - 런타임시(프로그램이 동작될때) 선언과 할당을 분리해준다. * 문제점은?? 코드를 작성할 때 예측하지 못한 실행 결과를 만들어 낼 수 있다. 굉장히 힘든 개발을 해야 할 수 있다. * 이러한 상황을 피하기 위해서는?? var를 사용하지 않는다. let, const를 사용해주자. 함수도 조심할것 좋은방법: 함수표현식을 이용하자 * 함수표현식 const sum = function() { return 1 + 2; } console.log(sum()); // 3
[JavaScript][clean-code] 임시변수를 제거하자
* 임시변수란? - Scope안에서 전역변수처럼 활용되는 변수 * 임시변수를 쓰면 왜 위험한가? 함수안에있는 임시객체들이 함수가 커지면서 전역공간이나 다름없는 상황에서 나올수 있다. 그렇게되면 임시객체들이 매우 위험한 요소들이 될 수가 있다. 명령형으로 가득한 로직이 나온다. 임시변수에 값을 넣고 넣고 넣고 변경하다가 보면 값이 예상이 되지않는다. 어디서 어떻게 잘못되었는지 디버깅이 힘들다. 추가적인 코드를 작성하고 싶은 유혹에 빠지기 쉽다. 코드 유지보수가 어렵다. * 임시변수나 임시객체들은 어떻게 CRUD하는게 좋을까? (CRUD는 조작한다는 의미) 함수를 많이 나누는 방법 임시변수에 담지않고 바로 반환하기 단 하나의 역할만 할 수 있는 함수로 만들기 고차함수를 사용 ex) map(), filter(..
[JavaScript][clean-code] 전역 변수 사용 최소화
* 전역공간이 무엇일까? - 최상위 공간이 바로 전역공간이다. 브라우저에서는 Window가 최상위 공간 node에서는 Global이 최상위 공간 위 둘이 크게 다른것은 없다. * 전역공간을 너무 더럽히지 말자 - 이유는?? 어디서나 접근이 가능하게 된다. 사람이 생각하기에는 분리가 되었지만 런타임 환경에서는 분리가 되어있지않다. (위험하다) 다른 코드에도 영향을 주어 부작용을 발생시킬 수 있다. https://latte1114.tistory.com/497 (몽키패치 내용 참조) 파일을 나누어서 사용하였지만 다른 파일에서도 전역으로 설정한 변수가 읽힌다. 따라서 코드가 겹칠수도있다. 하지만 error은 발생하지 않아서 어디서 문제가 생긴건지 확인이 힘들다. - 어떤 방법이 좋은방법일까? 전역변수를 애초에 ..
[JavaScript][clean-code] var를 지양하자
* var를 사용을 지양하자. - let, const를 사용하자 * 왜 let, const를 사용해야 할까?? 1. Scope (핵심) var : 함수 스코프 let, const : 블록 스코프, Temporal Dead Zone(TDZ)속성을 가지고있음 더 안전하다. TDZ : 변수 선언 전에 변수를 호출 할경우 reference error 가 발생하는데 이때 tdz 에 걸렸다고 표현 2. 재선언, 재할당 var : 재선언, 재할당이 가능하다. 중복선언도 가능하다. 따라서 코드가 길어지면 어떤값이 선언된건지 어떤값이 호출될지 예상이 되지않는다. let : 재선언 불가능, 재할당은 가능 따라서 안전하게 사용 가능 const : 재선언 및 재할당이 되지않음 * code로 확인하는 scope의 차이 * va..