2.4.2 undefined

jude·2022년 1월 31일
0

you don't know js

목록 보기
15/30
post-thumbnail

undefined의 할당

느슨한 모드에서는 전역 스코프에 undefined에 값을 할당할 수 있다.(절대 비추천)

function foo() {
  undefined = 2; // 타입 에러가 발생하지 않는다.
}
foo(); // undefined
function foo() {
  "use strict";
  undefined = 2; // 타입 에러 발생
}
foo(); // TypeError: Cannot assign ...

그런데 황당한 것은 undefined라는 지역변수를 생성할 수 있다.

function foo() {
  "use strict"
  var undefined = 2;
  console.log(undefined);
}
foo(); // 2

절대 이렇게 쓰지 말자.


void 연산자

보이드 연산자는 어떤 값이든 무효로 만드는 특징이 있어서 값을 undefined로 만들어 버린다.

기존 값은 건드리지 않기 때문에 !(부정 연산자)를 쓰고 싶지 않을 때 즉, 긍정 오류가 일어나지 않게 하고 싶을 때 사용하면 요긴하다.

var a = 42;
console.log( void a , a ); // undefined 42
function doSomething() {
  // APP은 이 애플리케이션에서 제공한 값이다..?
  if (!APP.ready) {
    return void setTimeout(doSomething, 100)
  }
  var result;
  return result;
}
if (doSomething()) {
  // 다음 작업 바로 실행
}

// 혹은
if (!APP.ready) {
  // 나중에 다시 해보자!
  setTimeout( doSomething, 100 );
  return;
}

링크에 href값에 javascript(void:0); 를 넣는 것을 종종 보는데 이렇게 쓰는 것이 잘못된 것은 아니지만, 링크 역할로 쓸 것이 아니라면(예를들면 탭버튼) 이벤트 리스너 작성시 e.preventDefault(); 를 쓰거나 return false; 를 사용하고 href값에는 #none 정도 붙여넣는 것이 깔끔할 것 같다.

개인적인 취향이겠지만 암튼 난 전자의 방식은 '관심사의 분리'면에서도 좀 아닌거 같다.

현대 프레임워크 시스템에서 관심사의 분리는 무의미한 개념이 되버리는거 같아서 슬프지만, 지킬 수 있는 상황에선 지켰으면 좋겠다.

profile
UI 화면 만드는걸 좋아하는 UI개발자입니다. 프론트엔드 개발 공부 중입니다. 공부한 부분을 블로그로 간략히 정리하는 편입니다.

0개의 댓글