자바스크립트 특성 파악하기 몽키 패치 런타임 중인 프로그램의 내용이 변경되는 행동을 의미한다. 자바스크립트는 여러 언어의 특성이 합쳐졌다. 문법은 자바와 비슷하다. 문자열과 배열 정규표현식은 펄과 비슷하다. 함수는 오크와 비슷하다.
typeof 연산자는 문자열로 반환한다.typeof만으로 모든 타입 검사가 다 커버되진 않는다.자바스크립트에서 타입을 크게 구분해보면, Primitive(원시값) 와 Reference(참조값) 으로 나눠진다.원시값은 typeof로 잘 검사할 수 있으나, 참조값은 typ
undefined와 null을 사용할 때 여러 경우에서 헷갈린다.MDN에서는 각각에 대해 다음과 같이 정의한다.null은 JavaScript의 원시 값 중 하나로, 어떤 값이 의도적으로 비어있음을 표현하며 불리언 연산에서는 거짓으로 취급합니다전역 undefined 속성
동등 연산자(== , Equality)\[MDN정의] : 동등 연산자(==)는 두 개의 피연산자가 동일한지 확인하며, Boolean값을 반환합니다. 일치 연산자(===)와는 다르게 다른 타입의 피연산자들끼리의 비교를 시도합니다.'='이 equality인데 이를 줄여서
isNaN = is Not A Number? \- isNaN() 함수는 어떤 값이 NaN인지 판별한다. \- 자바스크립트의 다른 모든 값과 달리, NaN은 같음 연산(==, ===)을 사용해 판별할 수 없기 때문에, NaN을 판별하는 함수가 필요했고 그 결과 isNaN
팀에서 min과 max에 대한 개념 정의를 함께 하고 컨벤션을 정해두어야 한다.min, max는 각각 경우에 따라 미만, 초과 또는 이하, 이상 둘 중에 하나로 해석될 수 있는데, 소속된 팀에서 한 가지로 정하고 그 컨벤션을 따라야 한다.또는 상수 네이밍을 할 때, M
삼항연산자는 3개의 피연산자를 취한다.조건 ? 참(값 또는 식) : 거짓(값 또는 식)삼항연산자를 중첩해서 많이 쓰면 가독성이 떨어진다. 분기조건이 많다면 차라리 switch 문을 쓰는 것이 나을 수 있다.삼항연산자를 중첩해 쓴다면 우선순위를 명확히 알 수 있도록 소괄
falsy 거짓 같은 값(8개)false0 (숫자 zero)\-0 (음수 zero)0n (BigInt)"" (빈 문자열)nullundefinedNaNtruthy 참 같은 값거짓 같은 값(8개)으로 정의된 값이 아니면 모두 참 같은 값으로 평가된다.자바스크립트는
else if문이 마치 파이프라인처럼 앞의 if문과 연결되어 차례대로 실행된다고 생각하면 안 된다.else if문은 else문 처리가 한 번 되고 if문 동작이 되는 것과 같다.위와 아래의 코드는 논리적으로 같으며, 결과도 같다.else를 쓰지 않아도 조건이 논리적으로
부정조건문을 사용하면 생각을 여러 번 해야 할 수 있다.위와 같은 부정조건문(isNaN)이 사용된 코드는 여러 번 생각해야 해서 실수할 수 있기 때문에, 아래와 같이 명시적인 긍정조건문(isNumber - 커스텀함수) 코드를 사용하는 편이 좋다.프로그래밍 언어 자체가
사용자의 실수를 예방하기 위해 Default Case를 고려하는 의식적인 노력이 필요하다함수에서 들어오야 할 인수가 전달되지 않을 경우 OR 연산자를 사용하여 안전하게 Default 값을 미리 설정해두는 방법이 권장된다.예제1예제2예제3예를 들어, parseInt()
Nullish coalescing operator(Null 병합 연산자)널 병합 연산자 (??) 는 왼쪽 피연산자가 null 또는 undefined일 때 오른쪽 피연산자를 반환하고, 그렇지 않으면 왼쪽 피연산자를 반환하는 논리 연산자이다.OR 연산자를 기본값으로 사용하
예를 들어 위와 같이 로그인 성공 확인하는 조건문이 있는데, 로그인 실패 케이스를 추가로 만든다고 하면, 기존의 상수값을 활용하여 아래와 같이 코드를 작성할 수 있다.!(isValidToken && isValidUser) 뒤에 추가 연산이 더 붙게 된다면 가독성이 떨어
위와 같이 배열에 마치 객체에서 key와 value를 설정하듯이 값을 입력하면, 객체처럼 값이 입력된 것을 확인할 수 있다.심지어 배열 내의 함수도 객체의 메서드처럼 실행할 수 있다.이런 특징을 잘 이해하고 있어야 한다.그리고 배열 여부를 확인하려면 Array.isAr
Array.length는 배열의 길이보다는 배열의 마지막 인덱스를 의미하는 것에 가깝다.배열의 길이를 0으로 설정하면 배열이 초기화된다.Array.length의 이러한 특성을 염두하고 주의해서 사용해야 한다.arr\[0], arr\[1] 처럼 배열의 인덱스로 배열 요소
Array.length는 배열의 길이보다는 배열의 마지막 인덱스를 의미하는 것에 가깝다.배열의 길이를 0으로 설정하면 배열이 초기화된다.Array.length의 이러한 특성을 염두하고 주의해서 사용해야 한다.유사배열객체는 말 그대로 '배열'이 아닌 '객체'이다. 그런데
아래의 코드를 살펴보면, 원본배열만 변경했는데 원본배열을 복사했던 새 배열도 함께 변경되는 사실을 확인할 수 있다.배열과 객체는 이처럼 변할 수 있다(mutable).따라서 배열과 객체에서도 불변성(immutable)을 지키는 방법을 고민한다.배열을 복사한다.새로운 배
배열 고차함수(forEach, map, fliter 등)에서 break 와 continue의 사용이 불가하다. 해당 고차함수들에서는 이들을 문법적으로 지원하지 않기 때문이다.해당 고차함수를 쓰면서 반복을 중간에 끝내어 최적화를 하고 싶으면, 조건에 따라 예외를 던지는
computed property name은 객체의 key 값을 대괄호 묶인 표현식으로 정의할 수 있는 문법이다.즉 프로퍼티 이름이 계산될 수 있다는 것이다.object lookup table은 실제 있는 문법은 아니다. 다만, 아래 코드처럼 switch문이나 if el
위와 같은 코드를 아래 코드처럼 구조분해할당을 활용하여 리팩토링 할 수 있다.함수의 매개변수를 객체로 받고, 인수를 객체로 전달한다면, 전달하는 매개변수를 명시적으로 쓸 수 있으며 매개변수의 key만 같으면 되므로 매개변수의 순서가 다르더라도 상관 없다.또한 함수의 매
객체 변경 방지 메서드객체 확장 금지 : Object.preventExtensions(), 확장이 금지된 객체는 프로퍼티 추가가 금지된다.객체 밀봉 : Object.seal(), 밀봉된 객체는 읽기와 쓰기만 가능하다객체 동결 : Object.freeze(), 동결된 객