我有一个变量,可以设置为某个或未定义。如果变量定义为true
,我希望传递给函数false
。这是功能:
function f(areRowsSelectable){...}
你会做以下哪一项?
f(v);
f(v?true:false);
还是其他什么?
答案 0 :(得分:3)
我通常使用双重否定(这意味着应用logical NOT operator两次)进行显式布尔转换:
!!v
示例:
!!'test' // true
!!'' // false
!!0 // false
!!1 // true
!!null // false
!!undefined // false
!!NaN // false
或者,Boolean(v)
也可以。
答案 1 :(得分:0)
我会使用" typeOf"守卫方法。
它不接受" truthy"参数,所以它取决于你的功能是否可以使用它。
tests
与czosel的回答基本相同,但他的回答是" truthy"虽然我只接受boolean true
作为true
。
var tests = [
//filled string
'test',
//empty string
'',
//Numeric empty
0,
//Numeric filled
1,
//Null
null,
//Completely undefined
,
//undefined
undefined,
//Not-A-Number numeric value
NaN,
//Boolean true
true
];
for (var t = 0; t < tests.length; t++) {
var test = tests[t];
var results = {
test: test,
isTruthy: !!test,
isBoolTrue: (typeof test != "boolean" ? false : test),
isDefined: (test !== void 0)
};
console.log(results);
}
&#13;
编辑1
由于问题可以通过多种方式解释,我已经包含了几项测试。
isTruthy
符合czosel的答案。将truthy
的值1
注册为true
。isBoolTrue
是我的第一个解释,它严格检查值是否为boolean true
。isDefined
只会返回。