zhaoqize / blog

✍️qize的博客:原创文章、外文翻译、技术总结和演示代码
https://zhaoqize.github.io/blog/
MIT License
280 stars 74 forks source link

合理的处理函数的默认参数 #28

Open zhaoqize opened 6 years ago

zhaoqize commented 6 years ago

给函数赋值的类似操作很常见:

function sure(options) {
   let name = options.name || 'qize'
   let age = options.age || 25
  // ...
}

这样的赋值没有什么大问题,但是如果遇到下面这种情况就会有问题了。比如,age 就是 0,且这个值就是合法的,如果按照上面的逻辑,这里还是会显示 25,很显然,这不是我们想要的结果。

所以这里,正确且安全的做法是使用 typeof 进行参数的类型检查

function sure(options) {
   let name = (typeof options.name !== 'undefined') ? options.name : 'qize'
   let age = (typeof options.age !== 'undefined') ? options.age || 25
  // ...
}

其实这里容易出现问题不只是 0,还有 空字符串等 Falsy 值。

Falsy包括:false、undefined、null、正负0、NaN、""