Как проверить, является ли тип Boolean

Как проверить, имеет ли тип переменной тип Boolean?

Я имею в виду, есть несколько альтернатив, например:

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

Но это не кажется мне симпатичным.

Есть ли более чистый способ достичь этого?

Ответ 1

Для этого typeof. Скобки являются необязательными, поскольку это оператор.

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

Ответ 2

Если вы просто хотите проверить примитивное значение

typeof variable === 'boolean'

Если по какой-то странной причине вы создаете логические элементы с конструктором, они не являются булевыми, а объектами, содержащими примитивное логическое значение, и один из способов проверить как примитивные булевы, так и объекты, созданные с помощью new Boolean, - это сделать:

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

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

console.log( checkBool( 'string'          )); // false, string
console.log( checkBool( {test: 'this'}    )); // false, object
console.log( checkBool( null              )); // false, null
console.log( checkBool( undefined         )); // false, undefined
console.log( checkBool( new Boolean(true) )); // true
console.log( checkBool( new Boolean()     )); // true
console.log( checkBool( true              )); // true
console.log( checkBool( false             )); // true

Ответ 3

Вы можете использовать чистый Javascript для достижения этого:

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

Ответ 4

С чистым JavaScript просто выполните это:

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

и назовите его!

isBoolean(false); //return true

также в исходном коде Underscore они проверяют его так (с помощью _ в начале имени функции):

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

Также в jQuery вы можете проверить его, как показано ниже:

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

Он рекомендовал не использовать какие-либо фреймворки для этого, поскольку это действительно простая проверка в JavaScript.

Ответ 5

Самый надежный способ проверки типа переменной в 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 true возвращает "boolean", а typeof new Boolean(true) возвращает "object".

Ответ 6

Я бы пошел с Lodash: isBoolean проверяет, является ли передаваемая переменная либо примитивной логической, либо логической оболочкой, и поэтому учетные записи для всех случаев.

Ответ 7

Если вы хотите, чтобы ваша функция также могла проверять логические объекты, наиболее эффективным решением должно быть:

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

Ответ 8

Есть три способа "vanilla" проверить это с помощью или без jQuery.

  • Во-первых, и, вероятно, наиболее оптимальным является принудительная булевская оценка путем принуждения, а затем проверьте, равна ли она исходному значению:

    function isBoolean( n ) {
        return !!n === n;
    }
    
  • Выполнение простой проверки typeof:

    function isBoolean( n ) {
        return typeof n === 'boolean';
    }
    
  • Выполнение полностью избыточного и ненужного создания экземпляра класса на примитиве:

    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;
    }
    

Ответ 9

Вы можете создать функцию, которая проверяет typeof для аргумента.

function isBoolean(value) {
  return typeof value === "boolean";
}