【问题标题】:JavaScript Arrow Function throws Undefined [duplicate]JavaScript箭头函数抛出未定义[重复]
【发布时间】:2020-05-14 15:19:02
【问题描述】:

下面是我的代码,用于将给定字符串的所有字符向前移动一个。

例如。 abc => bcd

    const moveCharForward = (str) => { 
      str
        .split('')
        .map(char => String.fromCharCode(char.charCodeAt(0) + 1)).join('');
     }


console.log(moveCharForward('abcd')); 

当我调用该方法时,它会抛出 undefined。

我修改了代码,去掉了下面的大括号。

    const moveCharForward = (str) => 
      str
        .split('')
        .map(char => String.fromCharCode(char.charCodeAt(0) + 1)).join('');

console.log(moveCharForward('abcd')); //working correctly

现在,当我调用该方法时,它可以正常工作。

我想知道为什么在大括号内添加方法实现时会抛出未定义?

【问题讨论】:

  • 您的moveCharForward 函数中缺少return。没有显式 return 语句的 JavaScript 函数返回 undefined。不使用块语法的箭头函数{} 是返回最后一个结果的特例。
  • 你需要在大括号中返回符号
  • 它没有抛出 undefined,它返回 undefined。 (更准确地说:调用它会产生undefined。)
  • @HunterMcMillen 谢谢。现在我明白了。

标签: javascript typescript


【解决方案1】:

当使用像这样的箭头函数时,如果你不使用花括号,那么 JavaScript 会隐式返回箭头后面的值。但是,如果你确实使用了花括号,那么 JavaScript 需要一段代码,其中必须有一个 return 语句才能返回一个值

【讨论】:

  • 这个问题被问了很多。有一个成熟的dupetarget 。无需发布更多答案。
  • @T.J.Crowder 我刚开始学习 JavaScript 中的箭头函数。
  • @dasitha - 上面的评论并不是要批评这个问题。需要指出的是,向其发布 answer 并不是 SO 的工作方式。当 SO 上已有答案时,我们会针对这些问题提出新问题,而不是用 150 个关于同一事物的问题和 300 个不同的答案将网站弄得一团糟。
【解决方案2】:

当您添加花括号时,您需要 return 关键字。没有花括号,返回是隐含的

【讨论】:

  • 这个问题被问了很多。有一个成熟的dupetarget 。无需发布更多答案。
猜你喜欢
  • 2017-03-02
  • 2021-03-29
  • 2018-11-10
  • 2023-03-08
  • 2018-08-04
  • 2019-06-30
  • 2022-07-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多