Mat*_*ero 222 javascript jquery types
如何检查变量的类型是否为Boolean类型?
我的意思是,有一些替代方案,如:
if(jQuery.type(new Boolean()) === jQuery.type(variable))
//Do something..
Run Code Online (Sandbox Code Playgroud)
但这对我来说似乎不太好看.
有没有更清洁的方法来实现这一目标?
Ami*_*oki 430
那是什么typeof
.括号是可选的,因为它是一个运算符.
if (typeof variable === "boolean"){
// variable is a boolean
}
Run Code Online (Sandbox Code Playgroud)
ade*_*neo 32
如果您只想检查原始值
typeof variable === 'boolean'
Run Code Online (Sandbox Code Playgroud)
如果由于一些奇怪的原因你有使用构造函数创建的布尔值,那些不是真正的布尔值,而是包含原始布尔值的对象,并且检查原始布尔值和创建的对象的一种方法new Boolean
是:
function checkBool(bool) {
return typeof bool === 'boolean' ||
(typeof bool === 'object' &&
bool !== null &&
typeof bool.valueOf() === 'boolean');
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
Ali*_*eza 26
随着纯JavaScript,你可以简单地使用typeof
,并完成类似typeof false
或者typeof true
,它会返回"boolean"
...
但这不是唯一的方法,我在下面创建函数以显示在JavaScript中检查布尔值的不同方法,以及在一些新框架中可以使用的不同方法,让我们从这个开始:
function isBoolean(val) {
return val === false || val === true;
}
Run Code Online (Sandbox Code Playgroud)
或单线ES6方式......
const isBoolean = val => 'boolean' === typeof val;
Run Code Online (Sandbox Code Playgroud)
并称之为!
isBoolean(false); //return true
Run Code Online (Sandbox Code Playgroud)
同样在Underscore源代码中,他们检查它(在函数名称的开头使用_.):
isBoolean = function(obj) {
return obj === true || obj === false || toString.call(obj) === '[object Boolean]';
};
Run Code Online (Sandbox Code Playgroud)
同样在jQuery中你可以这样检查:
jQuery.type(true); //return "boolean"
Run Code Online (Sandbox Code Playgroud)
在React中,如果使用propTypes,您可以像这样检查一个boolean值:
MyComponent.propTypes = {
children: PropTypes.bool.isRequired
};
Run Code Online (Sandbox Code Playgroud)
如果使用TypeScript,您还可以使用类型boolean:
let isDone: boolean = false;
Run Code Online (Sandbox Code Playgroud)
另一种方法是将值转换为布尔值,看看它是否完全相同,例如:
const isBoolean = val => !!val === val;
Run Code Online (Sandbox Code Playgroud)
或者喜欢:
const isBoolean = val => Boolean(val) === val;
Run Code Online (Sandbox Code Playgroud)
并称之为!
isBoolean(false); //return true
Run Code Online (Sandbox Code Playgroud)
不建议使用任何框架,因为它实际上是一个简单的JavaScript检查.
Mor*_*rry 16
您可以使用纯Javascript来实现此目的:
var test = true;
if (typeof test === 'boolean')
console.log('test is a boolean!');
Run Code Online (Sandbox Code Playgroud)
iSk*_*ore 14
有或没有jQuery,有三种"vanilla"方法可以检查这个.
首先是通过强制强制进行布尔评估,然后检查它是否等于原始值:
function isBoolean( n ) {
return !!n === n;
}
Run Code Online (Sandbox Code Playgroud)做一个简单的typeof
检查:
function isBoolean( n ) {
return typeof n === 'boolean';
}
Run Code Online (Sandbox Code Playgroud)对一个主要的类包装器做一个完全过度的和不必要的实例化:
function isBoolean( n ) {
return n instanceof Boolean;
}
Run Code Online (Sandbox Code Playgroud)第三个只会true
在你创建一个new Boolean
类并将其传入时返回.
要详细说明基元强制(如#1所示),可以用这种方式检查所有基元类型:
Boolean
:
function isBoolean( n ) {
return !!n === n;
}
Run Code Online (Sandbox Code Playgroud)Number
:
function isNumber( n ) {
return +n === n;
}
Run Code Online (Sandbox Code Playgroud)String
:
function isString( n ) {
return ''+n === n;
}
Run Code Online (Sandbox Code Playgroud)如果您希望您的函数也可以验证布尔对象,那么最有效的解决方案必须是:
function isBoolean(val) {
return val === false || val === true || val instanceof Boolean;
}
Run Code Online (Sandbox Code Playgroud)
小智 5
检查 true 和 false 的最简单方法是:
(typeof value === "boolean")
,但如果value
是该类的实例Boolean
,那么它将返回"object"
。
因此,为了处理这个问题,我们必须添加另一个条件来检查是否:
(value instanceof Boolean)
代码片段:
const value = false;
//const value = new Boolean(10);
//const value = new Boolean("hi");
if((typeof value === "boolean") || (value instanceof Boolean))
console.log("boolean");
else
console.log("not boolean");
Run Code Online (Sandbox Code Playgroud)