Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当返回字符串而不是null时,函数不会返回正确的值_Javascript - Fatal编程技术网

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))