JavaScript は NaN ですが、そうではないことは知っていますか?

StackOverflow https://stackoverflow.com/questions/2063988

  •  20-09-2019
  •  | 
  •  

質問

次の2つの機能があります...

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....
}

私が抱えている問題は、「ticks」であっても「resp」が常にNaNであることです1「間違いなくそうですよね?」

追伸:私はではありません JavaScript 開発者なので、コードが貧弱であっても優しくしてください。

役に立ちましたか?

解決

あなたのsplitTitleString()は、配列値を返します。

あなたがticksを定義するときに

しかし、あなたはvar ticks = new Array(splitTitleString(titleText));を言います。あなたはsplitTitleStringの戻り値、エレメント1で構成される配列を定義します。

その結果、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.... 
} 

他のヒント

あなたはresp機能外warning()にアクセスしている場合は、

、あなたの問題はvar respを使用することによって、あなたはの唯一含む関数内での見える新しい変数を定義することです。 RESPがグローバル変数ことになっている場合は、varキーワードを削除して、あなたは問題ないはずです。

JavaScriptでローカルおよびグローバル変数の素敵な荒廃は、ここを参照してください:変数のスコープとVARキーワード

Pekka が正しく言ったこととは別に、parseInt は基数パラメータを持つことを好みます。ドキュメントから:

RADIXパラメーターが省略されている場合、JavaScriptは次のとおりです。

  • 文字列が「0x」で始まる場合、基数は16です(16進数)
  • 文字列が「0」で始まる場合、基数は8(octal)です。この機能は廃止されました
  • 文字列が他の値から始まる場合、基数は10(小数)です

あなたは「のTitleText」パラメータとして何を渡していることは確かにint型の場合は、確認してください。私が意味する、[1]

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top