Ответ 1
Для этого typeof
. Скобки являются необязательными, поскольку это оператор.
if(typeof(variable) === "boolean"){
// variable is a boolean
}
Как проверить, имеет ли тип переменной тип Boolean?
Я имею в виду, есть несколько альтернатив, например:
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');
}
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
Вы можете использовать чистый Javascript для достижения этого:
var test = true;
if (typeof test === 'boolean')
console.log('test is a boolean!');
С чистым 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.
Самый надежный способ проверки типа переменной в 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"
.
Я бы пошел с Lodash: isBoolean проверяет, является ли передаваемая переменная либо примитивной логической, либо логической оболочкой, и поэтому учетные записи для всех случаев.
Если вы хотите, чтобы ваша функция также могла проверять логические объекты, наиболее эффективным решением должно быть:
function isBoolean(val) {
return val === false || val === true || val instanceof Boolean;
}
Есть три способа "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;
}
Вы можете создать функцию, которая проверяет typeof
для аргумента.
function isBoolean(value) {
return typeof value === "boolean";
}