传统的布尔测试

Raf*_*fay 0 javascript

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

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;
}
Run Code Online (Sandbox Code Playgroud)

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

kub*_*etz 7

  • 你不能===用于分配参数.请=改用.

  • 还有那些并不都是falsy值,你缺少0NaN.

整个方法可以简化为:

function moreConventionalDefaults(params, defaultParams) {
  return params || defaultParams;
}
Run Code Online (Sandbox Code Playgroud)

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

编辑:在Addy Osmani 探索JavaScript的逻辑OR运算符的文章中获取更多信息.