显式布尔转换

时间:2016-11-14 09:39:10

标签: javascript

我有一个变量,可以设置为某个或未定义。如果变量定义为true,我希望传递给函数false。这是功能:

function f(areRowsSelectable){...}

你会做以下哪一项?

f(v);


f(v?true:false);

还是其他什么?

2 个答案:

答案 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"参数,所以它取决于你的功能是否可以使用它。

testsczosel的回答基本相同,但他的回答是" 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;
&#13;
&#13;

编辑1

由于问题可以通过多种方式解释,我已经包含了几项测试。

  1. isTruthy符合czosel的答案。将truthy的值1注册为true
  2. isBoolTrue是我的第一个解释,它严格检查值是否为boolean true
  3. 如果变量包含任何内容,
  4. isDefined只会返回。