【问题标题】:Javascript function always returns nullJavascript 函数总是返回 null
【发布时间】:2025-12-26 01:25:16
【问题描述】:

我是 JavaScript 世界的新手。我怀疑 return 语句在 JavaScript 中是如何工作的。

我想做的是让一个函数传递一个参数param 并查看param 是否匹配exampleData 对象的键。如果找到匹配项,我想返回值并打破每个函数的循环也打破函数我不想在每个函数下执行任何其他语句。如果未找到匹配项,则该函数必须返回 null。但目前该函数总是返回空值。

function exampleFunction(param){
    $.each(exampleData, function (key, value) {
        if(key == param){
        return value;
        }
    });
    return null;
}

对此的任何见解将不胜感激。谢谢。

【问题讨论】:

  • 你确定 key 和 param 匹配吗?另外,您确定该值不为空吗?
  • 您的 return value; 处于不同的功能中。只需使用 for-in 循环即可。
  • 你不需要做这一切。 exampleData[param] 几乎做同样的事情。当 param 不在 exampleData 中时,它等于 undefined
  • @Paul 是对的。根本不需要循环,除非您确实需要 == 运算符的类型强制。

标签: javascript


【解决方案1】:

试试这个:

function exampleFunction(param){ 
    return exampleData[param];
  }

编辑:如果你想在参数未定义的情况下返回 null,那么看看 Paul 和 Crazy Train 的 cmets:

return (typeof exampleData[param] === 'undefined')? null: exampleData[param]; 

return (param in exampleData) ? exampleData[param] : null;

【讨论】:

  • 如果为null,则返回null。如果未定义,则返回未定义。
  • 所以如果他想要null,你需要测试它是否存在
  • 无需将其他人的答案复制到您的答案中
  • @mplungjan 他们是很好的建议,所以我编辑了我的答案以反映这一点。扩展答案没有害处。
  • 除非调用者正在测试=== null
【解决方案2】:

您的方法存在一些问题:

  1. 您定义的内部函数是 returning 到 $.each,而不是外部函数,因此您永远不会得到那个值。
  2. 您无需像现在这样疯狂地迭代对象。 Javascript中的对象是哈希表,你可以简单的做如下

function exampleFunction(param) {
    return exampleData[param];
}

如果exampleData[param]undefined,则返回undefined,否则,返回存储在那里的值。

如果您绝对需要未定义的情况来返回null 而不是undefined,那么它会变得有点复杂。

function exampleFunction(param) {
    if(exampleData.hasOwnProperty(param) {
        return exampleData[param];
    } else {
        return null;
    }
}

【讨论】:

    【解决方案3】:

    您的示例似乎不需要循环。从循环代理返回并不会为您做任何事情。

    您可以使用in 运算符测试某个键是否出现在对象中。

    function exampleFunction(param){
      return param in exampleData ? exampleData[param] : null;
    }
    

    【讨论】:

      【解决方案4】:

      鉴于 Crazy Train 的评论,您需要捕获匹配值以便稍后返回:

      function exampleFunction(param) {
          var match = null;
          $.each(exampleData, function (key, value) {
              if (key == param) {
                  match = value;
                  return false; // to end the $.each early
              }
          });
          return match;
      }
      

      【讨论】:

      • 额外+1结束每个
      • exampleData 不需要循环。
      • 除非你想在返回之前修改值
      • 修改值没有区别。
      • 我只是对 OP 的思路进行了最简单的修正;我绝对同意发布了更好的解决方案。