체인의정석

비트연산/ type of => " |" vs 논리연산 => "||" 구분하기!! 본문

개발/backend

비트연산/ type of => " |" vs 논리연산 => "||" 구분하기!!

체인의정석 2021. 12. 14. 16:24
728x90
반응형

페이징 부분에 다음과 같은 실수를 하였다.

아래처럼 "|"를 하면 두 값에 대한 byte연산을 진행하게 된다.

 

이러한 비트 연산을 원래 의도에서 벗어났다.

    this.page = page | 1;
    this.rpp = rpp | 20;

따라서 다음과 같은 논리연산으로 해야 값이 비었을 때 기본값을 넣어줄 수 있게 된다.

    this.page = page || 1;
    this.rpp = rpp || 20;

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_OR_assignment

 

Logical OR assignment (||=) - JavaScript | MDN

The logical OR assignment (x ||= y) operator only assigns if x is falsy.

developer.mozilla.org

하지만 주의할 점은 타입을 비교할 때는 "|" 를 사용한다는 점이다.

지금 작성한 모듈에서는 여기서 설명한 2가지 케이스만 있는데 앞으로 상황에 맞게 잘 사용해야겠다.

//typeof
//type guards
//Let’s go back and write the code for a version of padLeft which uses union types. We could write it with type predicates as follows:

function isNumber(x: any): x is number {
  return typeof x === "number";
}
 
function isString(x: any): x is string {
  return typeof x === "string";
}
 
function padLeft(value: string, padding: string | number) {
  if (isNumber(padding)) {
    return Array(padding + 1).join(" ") + value;
  }
  if (isString(padding)) {
    return padding + value;
  }
  throw new Error(`Expected string or number, got '${padding}'.`);

https://www.typescriptlang.org/docs/handbook/advanced-types.html

 

Documentation - Advanced Types

Advanced concepts around types in TypeScript

www.typescriptlang.org

 

728x90
반응형
Comments