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是否有奇怪的行为从三元语句返回一个函数值?或者我在上面的原始函数中是否出现了某种类型的语法或逻辑错误?
它不是超级直观,但这与三元操作无关.这都是关于自动分号插入的全部内容.
虽然表达式本身可以跨越多行,但在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)
| 归档时间: |
|
| 查看次数: |
53 次 |
| 最近记录: |