Programing/javascript

함정에 빠지기 쉬운 자바스크립트 문법4

2025. 5. 5. 08:06
반응형

자바스크립트의 독특한 문법과 유연성은 강력한 도구이지만, 예상과 다른 결과를 유발하기도 합니다. 이번 4탄에서는 자바스크립트 문법 중에서도 더욱 사소해 보이지만 실무에서 문제를 일으킬 수 있는 함정들을 소개합니다.


✅ 1. this의 동적 바인딩

📌 문제 상황

const obj = {
  name: 'JS',
  getName: function () {
    return this.name;
  }
};

const getName = obj.getName;
console.log(getName()); // undefined (엄격 모드에선 error)

📌 설명

this는 호출 방식에 따라 동적으로 결정됩니다. 위 코드에서 getName은 객체에서 분리되었기 때문에 this는 전역 객체를 참조하게 됩니다.

📌 대처

.bind(), 화살표 함수 또는 call, apply 사용으로 명시적 바인딩을 적용해야 합니다.


✅ 2. isNaN의 이상한 판단

📌 문제 상황

isNaN("abc"); // true

📌 설명

isNaN은 내부적으로 Number()로 형 변환 후 NaN 여부를 확인하므로 예기치 않은 true를 반환할 수 있습니다.

📌 대처

항상 Number.isNaN()을 사용하는 것이 안전합니다.


✅ 3. +true는 1이다

📌 문제 상황

console.log(+true); // 1
console.log(+false); // 0

📌 설명

+ 단항 연산자는 피연산자를 숫자로 변환합니다. 이처럼 불리언 값도 산술 연산에 사용되면 암묵적 형 변환이 일어납니다.

📌 대처

명시적 변환 (Number(true)) 또는 타입 체크를 통해 코드 가독성과 안정성을 확보해야 합니다.


✅ 4. return과 세미콜론 자동 삽입

📌 문제 상황

function test() {
  return
  {
    key: 'value'
  };
}

console.log(test()); // undefined

📌 설명

자바스크립트는 줄바꿈 후 세미콜론을 자동 삽입합니다. return 다음에 줄바꿈이 있으면 바로 반환되어 실제 객체는 반환되지 않습니다.

📌 대처

return 키워드와 반환값은 같은 줄에 위치시키는 것이 안전합니다.


✅ 5. function 선언의 호이스팅과 초기화

📌 문제 상황

sayHi(); // 정상 동작
function sayHi() {
  console.log('Hello');
}

sayBye(); // TypeError: sayBye is not a function
var sayBye = function() {
  console.log('Bye');
};

📌 설명

함수 선언(function)은 전체 스코프로 호이스팅되어 바로 호출 가능하지만, 함수 표현식(var)은 변수 선언만 올라가고 함수 정의는 런타임에 할당됩니다.

📌 대처

초기화를 명확히 구분하고, 가능하면 const 또는 let으로 함수 표현식을 선언합니다.


✅ 결론

자바스크립트는 작동 방식이 직관적이지 않은 부분이 많습니다. 특히 this, 형 변환, 세미콜론 자동 삽입 등은 주의하지 않으면 버그로 이어질 수 있습니다. 이러한 특성들을 잘 이해하고 의식적으로 작성하는 습관을 가지는 것이 안정적인 코드 작성을 위한 첫걸음입니다.

반응형

'Programing > javascript' 카테고리의 다른 글

함정에 빠지기 쉬운 자바스크립트 문법8  (1) 2025.05.05
함정에 빠지기 쉬운 자바스크립트 문법7  (1) 2025.05.05
함정에 빠지기 쉬운 자바스크립트 문법6  (0) 2025.05.05
함정에 빠지기 쉬운 자바스크립트 문법5  (1) 2025.05.05
함정에 빠지기 쉬운 자바스크립트 문법3  (0) 2025.05.05
함정에 빠지기 쉬운 자바스크립트 문법2  (0) 2025.05.05
함정에 빠지기 쉬운 자바스크립트 문법  (0) 2025.05.05
자바스크립트 실무 유틸 함수 시리즈 24 - 접근성 향상을 위한 유틸  (0) 2025.05.01
'Programing/javascript' 카테고리의 다른 글
  • 함정에 빠지기 쉬운 자바스크립트 문법6
  • 함정에 빠지기 쉬운 자바스크립트 문법5
  • 함정에 빠지기 쉬운 자바스크립트 문법3
  • 함정에 빠지기 쉬운 자바스크립트 문법2
Dongkkase
Dongkkase
개발자로 일하면서 부딪히는 문제풀이가 누군가에게 도움이 되길 바라며
    반응형
  • Dongkkase
    정집사의 개발로그
    Dongkkase
  • 전체
    오늘
    어제
    • All (478)
      • 금융 (61)
      • Programing (295)
        • Algorithm (39)
        • API (2)
        • javascript (122)
        • CSS (8)
        • HTML (10)
        • PHP (15)
        • JAVA (27)
        • JSP (17)
        • JSP 예제 (1)
        • IOS (1)
        • Android (1)
        • Sencha Touche (1)
        • bat file, cmd (0)
        • 디버깅 (2)
        • SQL (21)
        • MS-SQL (1)
        • MySQL (13)
        • 보안 (5)
      • Server (14)
        • Docker (1)
        • Windows (9)
        • Linux (3)
        • jeus (1)
      • Database (6)
      • IT 일반 (15)
      • 리뷰 (38)
        • Book (17)
        • 제품 (2)
        • 영화 소개 (11)
        • 음악 소개 (7)
      • 잡생각 (36)
        • 회고 (3)
        • 컬럼 (4)
        • 자료실 (6)
        • 낙서장 (12)
        • 위시리스트 (2)
        • WOW (1)
        • 덕 (1)
  • 인기 글

  • 최근 댓글

  • 태그

    jsp
    기초
    It
    iT's MY LiFE
    IT·컴퓨터
    블로그
    자바스크립트유틸
    php
    IT 관련
    자바스크립트
    SQL
    IT블로그
    읽고 싶은 책
    디자인패턴
    위시리스트
    사고 싶은 책
    Java
    JavaScript
    자바
    js패턴
Dongkkase
함정에 빠지기 쉬운 자바스크립트 문법4
상단으로

티스토리툴바