473,385 Members | 1,843 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

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

isNaN(null) == false

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
6 5547
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
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
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
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
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
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 thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

16
by: cwizard | last post by:
I'm calling on a function from within this form, and there are values set but every time it gets called I get slammed with a run time error... document.frmKitAmount.txtTotalKitValue is null or not...
4
by: Tom Esker | last post by:
I've got Javascript in a form that adds up all of the numbers in a column of form fields and displays a total. It works great if every field has an initial value of 0, but if any of them are null,...
13
by: s_m_b | last post by:
I'm building a suite of online forms for insurance. These have been stripped down from messy MS Word templates, and two of the six, substantially identical, are misbehaving with the .js page that...
4
by: Pertti Martikainen | last post by:
Hi, The following lines are from my Immediate - window: dValue NaN Double.IsNaN(dValue) false I evaluate variable dValue, I get NaN but IsNaN returns
4
by: siaj | last post by:
I am new to jscript.. I am trying to validate if a textbox on my ASP.NET page has numeric value.. The code I am using is function IsValidAmount() { var intTotalAmt =...
18
by: staeri | last post by:
I'm using the following code to create a sum: forecast = forecast + eval(f.value); This only works if "f.value" contains a number. Can someone please help me so that it also works if...
7
by: Kamal | last post by:
Hello all, I have a very simple html table with collapsible rows and sorting capabilities. The collapsible row is hidden with css rule (display:none). When one clicks in the left of the...
29
by: viki1967 | last post by:
HI there. This code responds with error: <script language="javascript" type="text/javascript"> <!-- function calcola(frmObj, id) {
3
by: suganya | last post by:
Hi Some professionals already has developed the project using menu. In my company, they have given me task to clear the error in that. It is a script file named as "menubarAPI4.js" which is kept...
1
by: CloudSolutions | last post by:
Introduction: For many beginners and individual users, requiring a credit card and email registration may pose a barrier when starting to use cloud servers. However, some cloud server providers now...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 3 Apr 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome former...
0
by: ryjfgjl | last post by:
In our work, we often need to import Excel data into databases (such as MySQL, SQL Server, Oracle) for data analysis and processing. Usually, we use database tools like Navicat or the Excel import...
0
by: taylorcarr | last post by:
A Canon printer is a smart device known for being advanced, efficient, and reliable. It is designed for home, office, and hybrid workspace use and can also be used for a variety of purposes. However,...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...

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.