472,110 Members | 1,814 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 472,110 software developers and data experts.

got value of "NaN"

77
hello all, i have an error value / "NaN" value that's i;m not expecting of..

this is i how i check the for the value that's become "NaN"


Expand|Select|Wrap|Line Numbers
  1. new Ajax.Request(base_url+'finance_control/cbh/recalculate_items', {postBody: Form.serialize('newcbhForm'), onComplete: function(transport) {
  2.             data = transport.responseText.evalJSON();
  3.             $('item_amount').innerHTML = data.amount;
  4.             max_cashbnknourut = parseInt(data.max_cashbnknourut);
  5.             if (isNaN(max_cashbnknourut) || isNaN(max_cashbnknourut)){
  6.                 alert("Nan error");
  7.             }
  8.         }})
the max_cashbnknourut is digit/numeric (0..10).
When i got "NaN" value, how can i make the value of max_cashbnknourut become digit/numeric again??tks

regards,

maminx
Aug 11 '08 #1
11 4636
gits
5,390 Expert Mod 4TB
could you tell what data.max_cashbnknourut is right after the eval?

kind regards
Aug 11 '08 #2
maminx
77
could you tell what data.max_cashbnknourut is right after the eval?

kind regards

yes that's right, actually i've already use that script logic to another functionality/module, and it's works well...but i have no idea when i;m using that logic/ script for another module, it's get NaN value...

help please, any idea???

when the "max_cashbnknourut" got NaN value, how can i reset the value become integer or the value of "max_cashbnknourut" after it's casting with parseInt ?
Aug 11 '08 #3
gits
5,390 Expert Mod 4TB
just put an alert after the eval-line and alert data.max_cashbnknourut ... it cannot be NaN when it could be parsed to int ... may be data.max_cashbnknourut is undefined? ...

kind regards
Aug 11 '08 #4
maminx
77
could you tell what data.max_cashbnknourut is right after the eval?

kind regards

//max_cashbnknourut before parsing is 1;
max_cashbnknourut = parseInt(data.max_cashbnknourut);
//max_cashbnknourut after parsing is NaN;
Aug 11 '08 #5
maminx
77
just put an alert after the eval-line and alert data.max_cashbnknourut ... it cannot be NaN when it could be parsed to int ... may be data.max_cashbnknourut is undefined? ...

kind regards

the "max_cashbnknourut" is undefined when it's not cast with parseInt.
Aug 11 '08 #6
gits
5,390 Expert Mod 4TB
the problem is not max_cashbnknourut that seems to be a global in your code ... but the data.max_cashbnknourut ... i assume it is just missing in your responseText ... you replace the global value 1 with an undefined value ...

kind regards
Aug 11 '08 #7
maminx
77
the problem is not max_cashbnknourut that seems to be a global in your code ... but the data.max_cashbnknourut ... i assume it is just missing in your responseText ... you replace the global value 1 with an undefined value ...

kind regards

my investigation is i always got NaN value after i make parseInt of "max_cashbnknourut", before i;m casting the max_cashbnknourut, the value is 1, and after i make

max_cashbnknourut = parseInt(data.max_cashbnknourut)

the value of max_cashbnknourut is become "NaN"

idea please??
Aug 11 '08 #8
gits
5,390 Expert Mod 4TB
parseInt(data.max_cashbnknourut) returns NaN in your case !!! ... so just check your Ajax-Response first! you assign NaN to your variable ... it is not a problem of parseInt ... it MUST be a problem of your Ajax-response ...

kind regards
Aug 11 '08 #9
maminx
77
parseInt(data.max_cashbnknourut) returns NaN in your case !!! ... so just check your Ajax-Response first! you assign NaN to your variable ... it is not a problem of parseInt ... it MUST be a problem of your Ajax-response ...

kind regards

yes of course my problem value of NaN is only in my case, i;m sorry the problem is not in parseInt of course...

when i read your message above, i just realize that the problem is in AJAX, and i figure out the solving..it;s in controller that called the AJAX function...

anyway, thanks a lot, you had give me an idea, superb !!

kind regard, maminx
Aug 11 '08 #10
gits
5,390 Expert Mod 4TB
glad to hear you found the error ... post back to the forum in case you have more questions ...

kind regards
Aug 11 '08 #11
LauraNutt
7 Nibble
Before selecting a method for checking for NaN, how should you not check for NaN?

NaN is a bizarre value in JavaScript, as it does not equal itself when compared, either with the loose equality (==) or strict equality (===) operator. NaN is the only value in the entire language which behaves in this manner with regards to comparisons.

For example, if parseInt(“a”) returns NaN, then parseInt(“a”) === NaN will return false. This may seem strange, but it makes perfect sense after thinking about what NaN really is.

NaN doesn’t tell you what something is, it tells you what it isn’t.

These two different strings being passed to parseInt() will both return NaN.

parseInt(“abc”) // NaN
parseInt(“def”) // NaN
Both statements return NaN, but are they really the same? Maybe, but it certainly makes sense why JavaScript would disagree, given that they are derived from different string arguments.

Here are a few examples of strict inequality comparisons, which demonstrate the inconsistency of NaN.

2 !== 2 // false
true !== true // false
“abc” !== “abc” // false
...
NaN !== NaN // true
Method 1: isNaN or Number.isNaN

JavaScript has a built-in method, appropriately named “isNaN,” which checks for NaN. There is a newer function called Number.isNaN, which is included in the ES2015 spec.

The difference between isNaN and Number.isNaN is that isNaN coerces the argument into a number type. To avoid complicated and unexpected outcomes, it is often advised to use the newer, more robust Number.isNaN to avoid these side effects. Number.isNaN does not perform any forcible type conversion, so it simply returns the boolean based on the parameter.

Here is an example of the difference between the two methods:

isNaN(undefined) // true
Number.isNaN(undefined) // false
isNaN, when passed undefined, returns true because undefined becomes NaN after number coercion. You can test this yourself by running Number(undefined). You will find that it returns NaN.

Number.isNaN, on the other hand, returns false. This is because no coercion takes place, and undefined is not NaN, it is simply undefined.

It is also important to note that Number.isNaN is a newer (ES2015) method in JavaScript, so browser support for Number.isNaN is not as stable as isNaN, which has been around since ES1 (1997).

Method 2: Object.is

Object.is is a JavaScript method which checks for sameness. It generally performs the same evaluations as a strict equality operator (===), although it treats NaN differently from strict equality.

Object.is(0, -0) will return false, while 0 === -0 will return true. Comparisons of 0 and -0 differ, as do comparisons of NaN. This concept is called “Same-value-zero equality.”

NaN === NaN // false
Object.is(NaN, NaN) // true
Object.is(NaN, NaN) will in fact return true, while we already know that NaN === NaN returns false. That makes this yet another valid way to check if something is not a number.
Oct 16 '20 #12

Post your reply

Sign in to post your reply or Sign up for a free account.

Similar topics

10 posts views Thread by Boštjan Jerko | last post: by
6 posts views Thread by asmirnov1234567890 | last post: by
24 posts views Thread by hjbortol | last post: by
59 posts views Thread by Pierre Quentel | last post: by
5 posts views Thread by Peter Hansen | last post: by
29 posts views Thread by Java script Dude | last post: by
reply views Thread by leo001 | last post: by

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.