我有一个变量,它被设置为某个或未定义。如果变量定义为其他false
,我希望传递给函数true
。这里是功能:显式布尔转换
function f(areRowsSelectable){...}
你会做什么?
f(v);
f(v?true:false);
还是别的什么?
我有一个变量,它被设置为某个或未定义。如果变量定义为其他false
,我希望传递给函数true
。这里是功能:显式布尔转换
function f(areRowsSelectable){...}
你会做什么?
f(v);
f(v?true:false);
还是别的什么?
我通常使用双否定(这意味着施加logical NOT operator两次)显式布尔转换:
!!v
实例:
!!'test' // true
!!'' // false
!!0 // false
!!1 // true
!!null // false
!!undefined // false
!!NaN // false
可替代地,也Boolean(v)
将工作。
我会使用“typeOf”防护方法。
它不接受“真理”的论点,所以它取决于你的功能是否可以使用它。
的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);
}
编辑1
因为问题可以在几个方面进行解释,我已经包括一对夫妇的更多的测试。
isTruthy
匹配czosel的回答。注册truthy
值如1
为true
。isBoolTrue
是我的第一个解释,它严格检查值是否为boolean true
。isDefined
只要返回变量是否包含任何内容。
“我希望传递给一个函数,如果变量被定义,否则返回false” - >我认为OP实际上要求“truthy-conversion”。 –