常规布尔测试

Conventional boolean tests

本文关键字:测试 常规布      更新时间:2023-09-26

问题

尽管您可以显式地检查一个值是真是假,但JavaScript中的惯例是针对所有假值进行测试。例如,我们可以通过测试if(value(来测试变量值是否为false。

代码

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;
}

尽管我正在针对所有错误的值进行测试,但这段代码并没有被接受。我做错了什么?有更好的方法吗?

  • 不能使用===分配到参数中。请改用=

  • 此外,这些值并不都是错误的,您缺少0NaN

整个方法可以简化为:

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

将评估params,如果它是错误的,则返回defaultParams

编辑:请参阅Addy Osmani的精彩文章《探索JavaScript的逻辑或运算符》,了解更多信息。

试试这个,请

function moreConventionalDefaults(params, defaultParams) {
    if (!params) params = defaultParams;
    return params;
     // or just 
    return params || defaultParams;
}
测试所有错误值的最佳方法是使用显式if语句。例如
if (params) {
  // Truthy
} else {
  // Falsy 
}

剩下的我交给你。

我想这个问题是在问;

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

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

因此,通过否定params参数(!params(,我们只有在条件求值为false(即falsy(时才执行该语句,这正是问题所要求的。