常规布尔测试
Conventional boolean tests
问题
尽管您可以显式地检查一个值是真是假,但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;
}
尽管我正在针对所有错误的值进行测试,但这段代码并没有被接受。我做错了什么?有更好的方法吗?
-
不能使用
===
分配到参数中。请改用=
。 -
此外,这些值并不都是错误的,您缺少
0
和NaN
。
整个方法可以简化为:
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(时才执行该语句,这正是问题所要求的。
相关文章:
- 模糊事件的Javascript测试
- 我的单元测试选项是什么
- 测试索引值是否等于某个数字的倍数
- 在localhost Dev Box上测试JSONP请求的最佳方式
- 测试数组中每个项的内容
- 测试Angular Service解决错误回调中的promise
- 使用Jest测试React Native应用程序
- 为函数代码编写测试
- 如何在Angular单元测试中从另一个控制器的rootScope将方法添加到rootScope中
- 如何使用JS/nightwatchjs并行运行多个测试
- 使用量角器的当前url单元测试的getTitle
- 茉莉花宝石-耙茉莉花:ci dons't运行测试
- JavaScript滚动脚本-在测试中激发,而不是在开发站点上
- AngularJS指令单元测试中未定义的函数
- 一个密码测试程序,如果存在空格,它会提醒用户
- 测试角度解析方法
- Protractor:在Iframe中测试非角度应用程序
- JavaScript ES6:测试箭头函数、内置函数、常规函数
- Howto:常规测试,看看小部件是否调用this.herited成功
- 常规布尔测试