我如何检查一个变量的类型是否为布尔类型?
我的意思是,有一些替代方案,比如:
if(jQuery.type(new Boolean()) === jQuery.type(variable))
//Do something..
但这对我来说不太好。
有没有更清洁的方式来实现这个目标?
我如何检查一个变量的类型是否为布尔类型?
我的意思是,有一些替代方案,比如:
if(jQuery.type(new Boolean()) === jQuery.type(variable))
//Do something..
但这对我来说不太好。
有没有更清洁的方式来实现这个目标?
当前回答
基准:
都很相似……
const { performance } = require('perf_hooks');
const boolyah = true;
var t0 = 0;
var t1 = 0;
const loops = 1000000;
var results = { 1: 0, 2: 0, 3: 0, 4: 0 };
for (i = 0; i < loops; i++) {
t0 = performance.now();
boolyah === false || boolyah === true;
t1 = performance.now();
results['1'] += t1 - t0;
t0 = performance.now();
'boolean' === typeof boolyah;
t1 = performance.now();
results['2'] += t1 - t0;
t0 = performance.now();
!!boolyah === boolyah;
t1 = performance.now();
results['3'] += t1 - t0;
t0 = performance.now();
Boolean(boolyah) === boolyah;
t1 = performance.now();
results['4'] += t1 - t0;
}
console.log(results);
// RESULTS
// '0': 135.09559339284897,
// '1': 136.38034391403198,
// '2': 136.29421120882034,
// '3': 135.1228678226471,
// '4': 135.11531442403793
其他回答
创建像isBoolean这样的函数,它包含了一个线性typeof v === "boolean",从长远来看似乎非常不方便。我很惊讶几乎每个人都建议创建自己的函数。这似乎与扩展原生原型是一样的癌症。
您需要在参与的每个项目中重新创建它们 其他开发人员可能有不同的习惯,或者需要检查您的函数的源代码,以查看您使用的检查的实现,以了解您的检查的弱点 你会感到沮丧,当你试图写一行在控制台现场不属于你的项目
记住typeof v === "boolean"就行了。 在IDE中添加一个模板,这样就可以通过一些三个字母的快捷方式来放置它。
关于es2015箭头函数的另一个决策
const isBoolean = val => typeof val === '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 true返回“boolean”,而typeof new boolean (true)返回“object”。
判断真假最简单的方法是: (typeof value === "boolean"), 但如果value是布尔类的实例,则返回"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");
使用纯JavaScript,你可以简单地使用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
同样在下划线源代码中,他们像这样检查它(用_。在函数名的开头):
isBoolean = function(obj) {
return obj === true || obj === false || toString.call(obj) === '[object Boolean]';
};
在jQuery中,你也可以这样检查它:
jQuery.type(true); //return "boolean"
在React中,如果使用propTypes,你可以检查一个值是否为布尔值,就像这样:
MyComponent.propTypes = {
children: PropTypes.bool.isRequired
};
如果使用TypeScript,你也可以使用类型布尔:
let isDone: boolean = false;
还有另一种方法,比如将值转换为布尔值,看看它是否仍然完全相同,比如:
const isBoolean = val => !!val === val;
或者像:
const isBoolean = val => Boolean(val) === val;
叫它!
isBoolean(false); //return true
不建议使用任何框架,因为这实际上是JavaScript中的一个简单检查。