开发者问题收集

为什么我的 javascript 函数返回 null?

2020-04-19
702

我有一个函数,它可以在 cookie 字符串中搜索特定的 cookie 并返回其值,但我不明白为什么当 cookie 存在时它一直返回 null。

document.cookie = "userName=nameHere";
function getCookie() {
    document.cookie.split(";").forEach(cookie => {
        if (cookie.substring(0, cookie.indexOf("=")) == "userName") {
            var name = cookie.substring(cookie.indexOf("=") + 1);
            console.log(name);
            return name;
        }
    })
    return null;
}

>> getCookie()
//prints
nameHere
//returns
null
3个回答

如果仔细观察,您会发现实际上有 2 个函数。

    `.forEach(cookie => {`

您实际上在箭头函数中返回 name

解决方案可能是使用 for 循环而不是 forEach

Ilijanovic
2020-04-19

这里有几点需要注意:

  • forEach 不会也不应该返回任何内容
  • 您的函数返回 null,因为您告诉它返回 null
  • 不要在函数中硬编码您要查找的 cookie 的名称,而是将其作为参数传递

话虽如此,这是一个有效的函数:

document.cookie = "userName=nameHere";
function getCookie(cName) {
      const decodedCookie = decodeURIComponent(document.cookie) // deal with any special character
      // returns the value of the first element in the provided array that satisfies the provided testing function
      const cookie = decodedCookie.split(";").find(c => c.substring(0, c.indexOf("=")) == cName)
      if (!cookie) return null // cookie not found, return
      const value = cookie.substring(cookie.indexOf("=") + 1)
      return value
    }

console.log(getCookie('userName'))
jperl
2020-04-19

我的猜测是:

var name = cookie.substring(cookie.indexOf("=") + 1);

实际上没有指定名称。尝试在名称变量后放置一个 Alert,或记录名称以检查内容。

Cornelis
2020-04-19