使用三元语句时,Javascript函数返回undefined

时间:2016-02-20 00:59:20

标签: javascript

给定两个实现相同精确逻辑的JS函数,第一个(test1)将始终返回undefined,而第二个(test2)将返回预期值。实现差异是单个return语句,vs将已评估的值存储在局部变量中,然后将其返回。

为什么test1会返回未定义而不是预期的结果?其次,为什么将它存储在局部变量(test2)中才能使它工作?

以下是确切示例:

function test1(a,b)
{
  return 
    a && a == 1 && b && b.match(/abc/i) ? 
      a + 1 : 
      0;
}

function test2(a,b)
{
  var val = 
    a && a == 1 && b && b.match(/abc/i) ? 
      a + 1 : 
      0;
  return val;
}


alert(test1(1,'abc'));  // returns undefined when it should return 2
alert(test2(1,'abc'));  // returns 2 as expected

这是一个JSFiddle:https://jsfiddle.net/8gmn004t/1/

2 个答案:

答案 0 :(得分:4)

JavaScript在return之后插入分号。你应该在它之后添加一个表达式,以便它可以继续。

您可以在此处阅读规则:What are the rules for JavaScript's automatic semicolon insertion (ASI)?

答案 1 :(得分:0)

在"返回"之后的第一种情况没有什么可以在同一条线上评估。在这种情况下,函数返回" undefined"。这就是这种语言的工作原理。

试试这个:

function test1(a,b)
{
  return a && a == 1 && b && b.match(/abc/i) ? 
      a + 1 : 
      0;
}