【问题标题】:Javascript function returns true when it should return falseJavascript函数在应该返回false时返回true
【发布时间】:2018-09-27 02:59:45
【问题描述】:

我有一个函数可以检查输入数组中是否存在参数。它应该返回 false 但没有。

{
  ...
  validation: params => {
    const valid = ["valid", "inputs"];
    valid.forEach( v=> {
      if (!params.hasOwnProperty(v)) {
        return false;
      }
    });

    return true;
  }

因此,即使 if 语句的计算结果为 true,它也永远不会返回 false。无论如何,此函数始终返回 true。

【问题讨论】:

  • 因为 return false stmt 是你回调的返回 stmt。尝试在回调中设置一个布尔值并返回基本的那个或使用 for 循环。
  • 如果有人可以发布我如何重构此代码以按照我的意图工作,我可以接受它作为答案。

标签: javascript


【解决方案1】:

作为替代方案,使用适合工作的工具。如果要检查数组的每个成员是否具有某个属性,请使用every

validation: params => {
  const valid = ["valid", "inputs"];
  return valid.every(v => params.hasOwnProperty(v));
}

【讨论】:

  • 是的,这确实是一个更好的主意。
【解决方案2】:

你的return 是从forEach 的回调函数返回的,而不是主函数。如果没有throw 之类的信息,您将无法从forEach 提前返回。如果您想提前返回,请改用for...of 循环:

validation: params => {
    const valid = ["valid", "inputs"];
    for (v of valid) {
      if (!params.hasOwnProperty(v)) {
      return false;  // this returns from the main function
    }
  };

  return true;
}

【讨论】:

  • 工作就像一个魅力。回调是个麻烦事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-28
  • 2019-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多