问题
虽然您可以明确检查值是true还是false,但JavaScript中的约定是针对所有虚假值进行测试。例如,我们可以通过测试if(value)来测试变量值是否为假。
代码
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 :(得分:7)
您无法使用===
分配给参数。请改用=
。
此外,这些并非都是假值,您遗漏了0
和NaN
。
整个方法可以简化为:
function moreConventionalDefaults(params, defaultParams) {
return params || defaultParams;
}
params
将被评估,如果它是假的,那么将返回defaultParams
。
编辑:在Addy Osmani的精彩文章Exploring JavaScript’s Logical OR Operator上获取更多信息。
答案 1 :(得分:3)
请试试这个
function moreConventionalDefaults(params, defaultParams) {
if (!params) params = defaultParams;
return params;
// or just
return params || defaultParams;
}
答案 2 :(得分:2)
测试所有虚假值的最佳方法是使用显式if
语句。例如
if (params) {
// Truthy
} else {
// Falsy
}
我会把剩下的留给你。
答案 3 :(得分:0)
我认为问题是要求;
function moreConventialDefaults(params, defaultParams) {
if (!params) {
params = defaultParams;
}
}
如果条件的计算结果为if
,则true
语句执行该语句(即是真实的),否则它将执行else
条件。
因此,通过否定params
参数(!params
),我们只在条件求值为false
(即falsy)时执行语句,这就是问题所在。对