Javascript 当返回字符串而不是null时,函数不会返回正确的值
我在学习时遇到了一个例子。当我做一个轻微的修改时,它将不起作用Javascript 当返回字符串而不是null时,函数不会返回正确的值,javascript,Javascript,我在学习时遇到了一个例子。当我做一个轻微的修改时,它将不起作用 function findSolution(target) { function find(current, history) { if (current == target) { return history; } else if (current > target) { return null; } else { return find(current + 5
function findSolution(target) {
function find(current, history) {
if (current == target) {
return history;
} else if (current > target) {
return null;
} else {
return find(current + 5, `(${history} + 5)`) ||
find(current * 3, `(${history} * 3)`);
}
}
return find(1, "1");
}
console.log(findSolution(24));
这就是一个例子。但是当我将elseif语句中的null更改为如下示例中的字符串时。else if语句被完全忽略。下面的例子
function findSolution(target) {
function find(current, history) {
if (current == target) {
return history;
} else if (current > target) {
return "impossible";
} else {
return find(current + 5, `(${history} + 5)`) ||
find(current * 3, `(${history} * 3)`);
}
}
return find(1, "1");
}
console.log(findSolution(24));
在上面的例子中,if-else在忽略条件的情况下继续运行
为什么会发生这种情况?这里的重要部分是
|
:
return find(current + 5, `(${history} + 5)`) ||
find(current * 3, `(${history} * 3)`);
按照|
的工作方式,如果左侧是真实的,它将在|
的左侧求值。否则,它将计算到右侧
在这里,如果您返回的是“不可能的”
,而不是null
,那么您将返回一个非空字符串,这是真实的。因此,find
的父调用方将返回该truthy字符串,而不是在右侧进行替换
要修复它,您可以使用==“不可能”
:
if (left !== 'impossible') return left;
return find(current * 3, `(${history} * 3)`);
函数查找解决方案(目标){
函数查找(当前、历史){
如果(当前==目标){
回归历史;
}否则如果(当前>目标){
返回“不可能”;
}否则{
const left=find(当前+5,`(${history}+5)`);
如果(左!=“不可能”)返回左;
返回find(当前*3,`(${history}*3)`);
}
}
返回结果(1,“1”);
}
控制台日志(findSolution(24))代码>