[javascript] 유형이 부울인지 확인하는 방법

변수 유형이 부울 유형인지 어떻게 확인합니까?

내 말은, 다음과 같은 대안이 있습니다.

if(jQuery.type(new Boolean()) === jQuery.type(variable))
      //Do something..

그러나 그것은 나에게 예쁘지 않은 것 같습니다.

이것을 달성하는 더 깨끗한 방법이 있습니까?



답변

그게 typeof거기에 있습니다. 괄호는 연산자 이므로 선택 사항 입니다.

if (typeof variable === "boolean"){
  // variable is a boolean
}


답변

기본 값만 확인하려는 경우

typeof variable === 'boolean'

이상한 이유로 생성자로 생성 된 부울이있는 경우 실제로 부울이 아니지만 기본 부울 값을 포함하는 객체이며 기본 부울과 함께 생성 된 객체를 확인하는 한 가지 방법 new Boolean은 다음 과 같습니다.

function checkBool(bool) {
    return typeof bool === 'boolean' ||
           (typeof bool === 'object' &&
            bool !== null            &&
           typeof bool.valueOf() === 'boolean');
}


답변

순수 자바 스크립트 , 그냥 간단하게 사용할 수 있습니다 typeof와 같은 무언가를 typeof false또는 typeof true그것을 반환합니다 "boolean"

그러나 이것이 유일한 방법은 아닙니다. 아래의 함수를 작성 하여 JavaScript에서 부울 을 확인할 수있는 다양한 방법과 새로운 프레임 워크에서 수행 할 수있는 다른 방법을 보여줍니다 . 이것부터 시작하겠습니다.

function isBoolean(val) {
   return val === false || val === true;
}

또는 한 줄 ES6 방식 …

const isBoolean = val => 'boolean' === typeof val;

그리고 그렇게 부르십시오!

isBoolean(false); //return true

또한 Underscore 소스 코드 에서 다음과 같이 확인합니다 (함수 이름 시작시 _. 사용).

isBoolean = function(obj) {
   return obj === true || obj === false || toString.call(obj) === '[object Boolean]';
};

또한 jQuery에서 다음과 같이 확인할 수 있습니다.

jQuery.type(true); //return "boolean"

반작용 , propTypes를 사용하는 경우, 당신은이 같은 부울로 값을 확인할 수 있습니다 :

MyComponent.propTypes = {
  children: PropTypes.bool.isRequired
};

사용하는 경우 타이프 라이터를 , 당신은 입력 사용할 수있는 부울 도 :

let isDone: boolean = false;

또한 그것을 수행하는 또 다른 방법은 값을 부울로 변환하고 값이 정확히 같은지 확인하는 것과 같습니다.

const isBoolean = val => !!val === val;

또는 같은 :

const isBoolean = val => Boolean(val) === val;

그리고 그것을 부르십시오!

isBoolean(false); //return true

JavaScript에서는 실제로 간단한 확인이므로 프레임 워크를 사용하지 않는 것이 좋습니다.


답변

jQuery를 사용하거나 사용하지 않고이를 확인하는 세 가지 “바닐라”방법이 있습니다.

  1. 먼저 강제로 부울 평가를 수행 한 다음 원래 값과 같은지 확인하십시오.

    function isBoolean( n ) {
        return !!n === n;
    }
  2. 간단한 typeof확인하기 :

    function isBoolean( n ) {
        return typeof n === 'boolean';
    }
  3. 프리미티브에서 클래스 래퍼를 완전히 과도하고 불필요하게 인스턴스화합니다.

    function isBoolean( n ) {
        return n instanceof Boolean;
    }

세 번째는 클래스를 만들고 전달 하면 반환 true 됩니다new Boolean .

프리미티브 강제에 대해 자세히 설명하기 위해 (# 1 참조) 모든 프리미티브 유형을 다음과 같이 확인할 수 있습니다.

  • Boolean:

    function isBoolean( n ) {
        return !!n === n;
    }
  • Number:

    function isNumber( n ) {
        return +n === n;
    }
  • String:

    function isString( n ) {
        return ''+n === n;
    }

답변

순수한 자바 스크립트를 사용하여이를 달성 할 수 있습니다.

var test = true;
if (typeof test === 'boolean')
   console.log('test is a boolean!');


답변

함수가 부울 객체의 유효성을 검사하도록하려면 가장 효율적인 솔루션은 다음과 같아야합니다.

function isBoolean(val) {
  return val === false || val === true || val instanceof Boolean;
}


답변

JavaScript에서 변수 유형을 확인하는 가장 신뢰할 수있는 방법 은 다음과 같습니다 .

var toType = function(obj) {
  return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase()
}
toType(new Boolean(true)) // returns "boolean"
toType(true); // returns "boolean"

이 합병증의 원인은 typeof truereturn "boolean"typeof new Boolean(true)반환하기 때문 "object"입니다.