جافا سكريبت هي NaN، لكني أعلم أنها ليست كذلك؟
-
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]