By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
435,105 Members | 2,560 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 435,105 IT Pros & Developers. It's quick & easy.

isNaN(null) == false

P: n/a
Small glitch (IMHO) in JavaScript is related to isNaN() boolean
function. If passed a null, it returns true which is incorrect.

This one cause me quite a bit of grief until I detected it and was
able to code around it.

Anybody know the reasoning for the result being false and not true for
isNaN(null).

- JsD

Jan 16 '08 #1
Share this Question
Share on Google+
6 Replies


P: n/a
Java script Dude wrote:
^^^^^^^^^^^^^^^^
Nomen est omen? One ECMAScript implementation that is discussed here
is called _JavaScript_ and does not have anything to do with Java.
Small glitch (IMHO) in JavaScript is related to isNaN() boolean
function. If passed a null, it returns true which is incorrect.
It is not a glitch and it is correct, not only because it is specified so
but because `null' is definitely not (interpretable as) a number since it is
"a primitive value that represents the null, empty, or non-existent
reference." (ES3 Final, 4.3.11)
This one cause me quite a bit of grief until I detected it and was
able to code around it.
It is always best if you know what you are doing.
Anybody know the reasoning for the result being false and not true for
isNaN(null).
| 15.1.2.4 isNaN (number)
|
| Applies ToNumber to its argument, then returns true if the result is NaN,
| and otherwise returns false.

See my previous posting for the definition of ToNumber() and the equals
operator (`==').
PointedEars
--
var bugRiddenCrashPronePieceOfJunk = (
navigator.userAgent.indexOf('MSIE 5') != -1
&& navigator.userAgent.indexOf('Mac') != -1
) // Plone, register_function.js:16
Jan 16 '08 #2

P: n/a
AKS
On Jan 16, 9:57 am, Thomas 'PointedEars' Lahn <PointedE...@web.de>
wrote:
My guess would be that ToNumber(null.[[DefaultValue]](hint=Number)) that
is called by ToNumber(ToPrimitive(null, hint=Number)) that is called by
ToNumber(null) throws an exception and so there is no result for the latter
operation, and no result means that `false' is returned from the method:
Why do you think that -toPrimitive- is needed? Null is primitive.

Jan 16 '08 #3

P: n/a
On Jan 16, 11:08 am, AKS <aksus...@yandex.ruwrote:
On Jan 16, 9:57 am, Thomas 'PointedEars' Lahn <PointedE...@web.de>
wrote:
My guess would be that ToNumber(null.[[DefaultValue]](hint=Number)) that
is called by ToNumber(ToPrimitive(null, hint=Number)) that is called by
ToNumber(null) throws an exception and so there is no result for the latter
operation, and no result means that `false' is returned from the method:

Why do you think that -toPrimitive- is needed? Null is primitive.
These are some good questions on the same topic .....

Is true or false ?

1) NaN == NaN -->
2) null == undefined -->
3) false==0 -->
4) false===0 -->
5) "5"==5 -->
"5"===5 -->

Just try to answer all these

some more simple but good question here
http://ketankhairnar.blogspot.com/20...ript-test.html
Anyways to get clear idea.. read below
This is the text from the Wrox: Profession JavaScript book

When performing conversions, follow these basic rules:
❑ If an operand is a Boolean value, convert it into a numeric value
before checking for equality.
A value of false converts to 0; whereas a value of true converts to 1.
❑ If one operand is a string and the other is a number, attempt to
convert the string into a number
before checking for equality.
❑ If one operand is an object and the other is a string, attempt to
convert the object to a string
(using the toString() method) before checking for equality.
❑ If one operand is an object and the other is a number, attempt to
convert the object to a number
before checking for equality.

The operators also follow these rules when making comparisons:
❑ Values of null and undefined are equal.
❑ Values of null and undefined cannot be converted into any other
values for equality checking.
❑ If either operand is NaN, the equal operator returns false and the
not equal operator returns
true. Important note: Even if both operands are NaN, the equal
operator returns false because,
by rule, NaN is not equal to NaN.
❑ If both operands are objects, then the reference values are
compared. If both operands point to
the same object, then the equal operator returns true. Otherwise, the
two are not equal.
The following table lists some special cases and their results:

Expression Value
--------------------------
null == undefined true
“NaN” == NaN false
5 == NaN false
NaN == NaN false
NaN != NaN true
false == 0 true
true == 1 true
true == 2 false
undefined == 0 false
null == 0 false
“5” == 5 true

Jan 16 '08 #4

P: n/a
AKS wrote:
[...] Thomas 'PointedEars' Lahn [...] wrote:
>My guess would be that ToNumber(null.[[DefaultValue]](hint=Number)) that
is called by ToNumber(ToPrimitive(null, hint=Number)) that is called by
ToNumber(null) throws an exception and so there is no result for the latter
operation, and no result means that `false' is returned from the method:

Why do you think that -toPrimitive- is needed? Null is primitive.
Yes, it is. However, the specified ToNumber() algorithm for an argument of
type Object makes no distinction about whether or not ToPrimitive() actually
needs to be invoked, so that question is moot. Only following the algorithm
to the letter will bring understanding about the observed result.
PointedEars
--
realism: HTML 4.01 Strict
evangelism: XHTML 1.0 Strict
madness: XHTML 1.1 as application/xhtml+xml
-- Bjoern Hoehrmann
Jan 16 '08 #5

P: n/a
AKS
On 16 , 15:48, Thomas 'PointedEars' Lahn <PointedE...@web.de>
wrote:
>However, the specified ToNumber() algorithm for an argument of
type Object ...
Argument of type Object??? The null value has the same (null) type.

Jan 16 '08 #6

P: n/a
AKS wrote:
[...] Thomas 'PointedEars' Lahn [...] wrote:
> However, the specified ToNumber() algorithm for an argument of
type Object ...

Argument of type Object??? The null value has the same (null) type.
Ahh, thanks, this is where I went wrong (it *was* late ;-)): I completely
overlooked the row for the Null type. So the explanation is much more
obvious than I thought: isNaN(number) should return `true' if
ToNumber(number) is NaN, `false' otherwise. Since ToNumber(null) returns
+0, which is not NaN, the return value of isNaN(null) is `false'.
Regards,

PointedEars
--
Use any version of Microsoft Frontpage to create your site.
(This won't prevent people from viewing your source, but no one
will want to steal it.)
-- from <http://www.vortex-webdesign.com/help/hidesource.htm>
Jan 16 '08 #7

This discussion thread is closed

Replies have been disabled for this discussion.