传统的布尔测试

时间:2011-12-01 16:31:09

标签: javascript

问题

  

虽然您可以明确检查值是true还是false,但JavaScript中的约定是针对所有虚假值进行测试。例如,我们可以通过测试if(value)来测试变量值是否为假。

代码

function UnconventionalDefaults(params, defaultParams) {
  if (params === undefined) {
    params = defaultParams;
  }

  // function would do work here

  return params;
}

// Modify this function to set params to defaultParams if params
// is falsy
function moreConventionalDefaults(params, defaultParams) {
  // do a more conventional check here (check if params is falsy, 
  // and not just undefined
  if(params === undefined){
    params === defaultParams;
  }else if(params === null){
    params === defaultParams;
  }else if(params === ""){
    params === defaultParams;
  }else if(params === false){
    params === defaultParams;
  }

  return params;
}

虽然我正在测试所有虚假值,但此代码未被接受。我做错了什么?有没有更好的方法呢?

4 个答案:

答案 0 :(得分:7)

  • 您无法使用===分配给参数。请改用=

  • 此外,这些并非都是假值,您遗漏了0NaN

整个方法可以简化为:

function moreConventionalDefaults(params, defaultParams) {
  return params || defaultParams;
}

params将被评估,如果它是假的,那么将返回defaultParams

编辑:在Addy Osmani的精彩文章Exploring JavaScript’s Logical OR Operator上获取更多信息。

答案 1 :(得分:3)

请试试这个

function moreConventionalDefaults(params, defaultParams) {
    if (!params) params = defaultParams;
    return params;
     // or just 
    return params || defaultParams;
}

答案 2 :(得分:2)

测试所有虚假值的最佳方法是使用显式if语句。例如

if (params) {
  // Truthy
} else {
  // Falsy 
}

我会把剩下的留给你。

答案 3 :(得分:0)

我认为问题是要求;

function moreConventialDefaults(params, defaultParams) {
    if (!params) {
        params = defaultParams;
    }
}

如果条件的计算结果为if,则true语句执行该语句(即是真实的),否则它将执行else条件。

因此,通过否定params参数(!params),我们只在条件求值为false(即falsy)时执行语句,这就是问题所在。对