جافا سكريبت هي NaN، لكني أعلم أنها ليست كذلك؟

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

  •  20-09-2019
  •  | 
  •  

سؤال

لدي الوظيفتين التاليتين ...

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 على الرغم من وجود "القراد".1"بالتأكيد هو؟

ملاحظة:انا لست جافا سكريبت المطور لذا يرجى أن تكون لطيفًا إذا كان الكود سيئًا.

هل كانت مفيدة؟

المحلول

وsplitTitleString() ديك بإرجاع قيمة مجموعة.

ولكن، عند تعريف ticks، ويقول لك var ticks = new Array(splitTitleString(titleText));. يمكنك تحديد مجموعة والتي تتكون من واحد element- قيمة الإرجاع 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.... 
} 

نصائح أخرى

إذا كنت الوصول إلى resp خارج الدالة warning()، المشكلة هي أنه باستخدام var resp، قمت بتعريف متغير جديد مرئيا <م> فقط ضمن الدالة تحتوي على . إذا كان من المفترض أن يكون متغير عمومي التركيب، وإزالة الكلمة var، ويجب أن يكون على ما يرام.

وانظر هنا لطيفة المتهدمة على المتغيرات المحلية والعالمية في جافا سكريبت: متغير نطاق وفار الكلمة

وبصرف النظر عن ما قاله Pekka بشكل صحيح، يفضل parseInt أن يكون لديه معلمة جذرية.من المستندات:

إذا تم حذف معلمة الجذر ، تفترض جافا سكريبت ما يلي:

  • إذا كانت السلسلة تبدأ ب "0x" ، فإن الجذر هو 16 (سداسي عشري)
  • إذا كان تبدأ السلسلة ب "0" ، والجذر هو 8 (ثماني).تم إهمال هذه الميزة
  • إذا كانت السلسلة تبدأ بأي سلسلة أخرى القيمة ، الجذر هو 10 (عدد عشري)

وماذا يمر كمعلمة "titleText"، والتحقق ما اذا كان هو في الواقع عدد صحيح. أعني [1]

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top