题
虽然您可以显式检查值是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)
虽然我正在测试所有虚假值,但此代码未被接受.我做错了什么?有没有更好的方法呢?
你不能===用于分配参数.请=改用.
还有那些并不都是falsy值,你缺少0和NaN.
整个方法可以简化为:
function moreConventionalDefaults(params, defaultParams) {
return params || defaultParams;
}
Run Code Online (Sandbox Code Playgroud)
params将被评估,如果它是假的,那么defaultParams将返回.
编辑:在Addy Osmani 探索JavaScript的逻辑OR运算符的文章中获取更多信息.