==와 != 대신 ===와 !==를 사용한다. eslint: eqeqeq(===) (!==) > (==)


 

Conditional statements


  • if 와 같은 조건문 : ToBoolean 의 추상 메서드로 강제변환을 사용하여 식을 평가한다.
    식을 평가하는 규칙은 다음과 같다.
if ([0] && []) {
  // true
  // 배열은 객체이다. 빈객체도 객체임
  // 객체는 항상 true 
}
  • Objects -> true
  • Undefined -> false
  • Null -> false
  • Booleans -> true / false
  • Numbers
    • false : +0, -0, NaN
    • otherwise true
  • Strings
    • false : empty string ''
    • otherwise true

 

reference: boolean -> 축약 , 문자열/숫자 -> 명시적 비교


// bad
if (isValid === true) {
  // ...
}

// good
if (isValid) {
  // ...
}

// bad
if (name) {
  // ...
}

// good
if (name !== '') {
  // ...
}

// bad
if (collection.length) {
  // ...
}

// good
if (collection.length > 0) {
  // ...
}

 

Truth Equality and JavaScript by Angus Croll


 

어휘 선언이 있는 case/default 문 : { } braces 사용


  • Lexical declarations [어휘 선언]
  • let, const, function, and class
  • 스위치 블록 스코프가 존재한다.
  • case/default 에 { } 가 없다면 여러 case 절에서 동일한 것을 정의하려고 할 때 문제가 발생함.
// bad
switch (foo) {
  case 1:
    let x = 1;
    break;
  case 2:
    const y = 2;
    break;
  case 3:
    function f() {
      // ...
    }
    break;
  default:
    class C {}
}
switch (1) {
  case 1:
    let v ;
    break;
  case 2:
    let v;  // Uncaught SyntaxError: Identifier 'v' has already been declared
    break;
  case 3:
    function f() {
      // ...
    }
    break;
  default:
    class C {}
}
// good
switch (foo) {
  case 1: {
    let x = 1;
    break;
  }
  case 2: {
    const y = 2;
    break;
  }
  case 3: {
    function f() {
      // ...
    }
    break;
  }
  case 4:
    bar();
    break;
  default: {
    class C {}
  }
}

 

삼항의 중첩 X : 기본적으로 단일행 표현식


// bad
const foo = maybe1 > maybe2
  ? "bar"
  : value1 > value2 ? "baz" : null;

// split into 2 separated ternary(삼항) expressions
const maybeNull = value1 > value2 ? 'baz' : null;

// better
const foo = maybe1 > maybe2
  ? 'bar'
  : maybeNull;

// best

 

불필요한 삼항 표현식 X


// bad
const foo = a ? a : b;
const bar = c ? true : false;
const baz = c ? false : true;

// good
const foo = a || b;
const bar = !!c;
const baz = !c;

 

혼합 연산자 : () 로 감싸기


  • 혼합연산자는 우선순위가 모호하다.
    • +, -, ** 는 예외이다.
    • /, * 는 모호 하다.
// bad
const foo = a && b < 0 || c > 0 || d + 1 === 0;

// bad
const bar = a ** b - 5 % d;

// bad
// (a || b) && c 와 혼동될 수 있다.
if (a || b && c) {
  return d;
}

// bad
const bar = a + b / c * d;

// good
const foo = (a && b < 0) || c > 0 || (d + 1 === 0);

// good
const bar = a ** b - (5 % d);

// good
if (a || (b && c)) {
  return d;
}

// good
const bar = a + (b / c) * d;

'JS > 자바스크립트 Style Guide' 카테고리의 다른 글

14. Block (JS style guide)  (0) 2023.02.15
13. Hoisting (JS style guide)  (0) 2023.01.27
12. Variables (JS style guide)  (0) 2023.01.26
11. Properties (JS style guide)  (2) 2023.01.16
10. terators and Generators (JS style guide)  (0) 2023.01.09