【问题标题】:JavaScript is a NaN, but I know it's not?JavaScript 是 NaN,但我知道它不是?
【发布时间】:2011-01-05 01:25:47
【问题描述】:

我有以下两个功能...

function splitTitleString(titleText)
{   
    var titleText = titleText;
    var temp = new Array();
    temp = titleText.split(' - ');
    var now = new Date().getTime();
    var warningExpResp = 7200000;
    var expRespDateTimeTicks = 0;
    var slaDateTimeTicks = 0; 

    if(temp[0].length > 0)
    {
    slaDateTimeTicks = getTicks(temp[0]);
    }

    if(temp[1].length > 0)
    {
        expRespDateTimeTicks = getTicks(temp[1]);
    }

    var returnTicksArray = new Array(slaDateTimeTicks,expRespDateTimeTicks);

    return returnTicksArray;
}

还有……

function  warning(titleText, serverDateTime, warningLengthMins, warningType)
{
    var warningLengthTicks = warningLengthMins * (60 * 1000);
    var ticks = new Array(splitTitleString(titleText));
    var sla = parseInt(ticks[0]);
    var resp = parseInt(ticks[1]);
    var serverTicks = getTicks(serverDateTime);

    // some other work....
}

我遇到的问题是 'resp' 始终是 NaN,即使 'ticks1' 绝对是?

PS:我不是JavaScript 开发人员,所以如果代码很糟糕,请多多关照。

【问题讨论】:

  • 我完全不明白你在这里想要达到什么目的。
  • 你在哪里使用resp它返回NaN
  • [OT] FWIW,因为我知道你是 JS 的新手,所以这一行没有任何作用:var titleText = titleText; titleText 参数已经在函数中以与 @ 完全相同的方式定义987654329@ 定义了它(你可以在函数内随意更改它的值;这样做在函数外没有任何影响,JavaScript 变量总是按值传递)。

标签: javascript nan


【解决方案1】:

您的splitTitleString() 返回一个数组值。

但是,当您定义ticks 时,您说的是var ticks = new Array(splitTitleString(titleText));。您定义一个由一个元素组成的数组 - splitTitleString 的返回值。

结果ticks[0]显然不是整数,是数组!

编辑:要修复它,请像这样重写您的函数:

function  warning(titleText, serverDateTime, warningLengthMins, warningType) 
{ 
    var warningLengthTicks = warningLengthMins * (60 * 1000); 
    //I removed the "new Array()" from the next line
    var ticks = splitTitleString(titleText); 
    var sla = parseInt(ticks[0]); 
    var resp = parseInt(ticks[1]); 
    var serverTicks = getTicks(serverDateTime); 

    // some other work.... 
} 

【讨论】:

  • 谢谢...这确实是问题:-)
【解决方案2】:

你作为“titleText”参数传递了什么,检查它是否确实是一个 int。我的意思是 [1]

【讨论】:

    【解决方案3】:

    除了 Pekka 正确说的之外,parseInt 更喜欢有一个 radix 参数。来自文档:

    如果radix参数被省略, JavaScript 假设如下:

    • 如果字符串以“0x”开头,则 基数是 16(十六进制)
    • 如果 字符串以“0”开头,基数为 8 (八进制)。此功能已弃用
    • 如果字符串以任何其他 值,基数为 10(十进制)

    【讨论】:

      【解决方案4】:

      如果您在warning() 函数之外访问resp,您的问题是通过使用var resp,您定义了一个仅在包含函数中可见的新变量。如果 resp 应该是一个全局变量,去掉 var 关键字就可以了。

      请参阅此处以了解 Javascript 中的局部和全局变量:Variable scope and the var keyword

      【讨论】:

        猜你喜欢
        • 2021-07-10
        • 2015-12-17
        • 1970-01-01
        • 2012-09-11
        • 2013-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多