javascript是否有奇怪的行为从三元语句返回一个函数值?

use*_*345 1 javascript

javascript是否有奇怪的行为从三元语句返回一个值?这是我为应用程序编写的函数,它从三元语句返回一个值:

function getFlowAmount(fromRegionName, toRegionName)
{
    return 
        _reportPeriodId === 1 ? 
        mapData[toRegionName + 'Region']['NetFlow' + fromRegionName ] : 
        mapData[toRegionName + 'Region']['NetFlowChange' + fromRegionName];
}
Run Code Online (Sandbox Code Playgroud)

上面的函数返回undefined,即使dev工具监视器显示应该返回一个值,所以我用更模块化和冗长的方式重写了函数,如下所示:

function getFlowAmount(fromRegionName, toRegionName)
{
    var flowAmount = 0;
    if(_reportPeriodId === 1) flowAmount = mapData[toRegionName + 'Region']['NetFlow' + fromRegionName ];
    else flowAmount = mapData[toRegionName + 'Region']['NetFlowChange' + fromRegionName];
    return flowAmount;
}
Run Code Online (Sandbox Code Playgroud)

当我重写了如上所示的javascript函数时,函数开始返回预期值.那么javascript是否有奇怪的行为从三元语句返回一个函数值?或者我在上面的原始函数中是否出现了某种类型的语法或逻辑错误?

Dav*_*vid 7

它不是超级直观,但这与三元操作无关.这都是关于自动分号插入的全部内容.

虽然表达式本身可以跨越多行,但在JavaScript中,return语句和表达式的开头之间不能有新的行.所以这:

return 
    _reportPeriodId === 1 ? 
    mapData[toRegionName + 'Region']['NetFlow' + fromRegionName ] : 
    mapData[toRegionName + 'Region']['NetFlowChange' + fromRegionName];
Run Code Online (Sandbox Code Playgroud)

成为这个:

return;
    _reportPeriodId === 1 ? 
    mapData[toRegionName + 'Region']['NetFlow' + fromRegionName ] : 
    mapData[toRegionName + 'Region']['NetFlowChange' + fromRegionName];
Run Code Online (Sandbox Code Playgroud)

并且从一开始就不会评估三元操作.

要纠正它,只需在同一行开始操作:

return _reportPeriodId === 1 ? 
    mapData[toRegionName + 'Region']['NetFlow' + fromRegionName ] : 
    mapData[toRegionName + 'Region']['NetFlowChange' + fromRegionName];
Run Code Online (Sandbox Code Playgroud)

  • XD打败了我们所有人 (2认同)