Reputation: 546055
I'm looking through some of the code from the Google Closure Library and I found this line:
var isNegative = number < 0.0 || number == 0.0 && 1 / number < 0.0;
I've figured that the reason for such an initially strange looking sign-check is to identify -0
as negative, but is there any reason to use 0.0
instead of 0
?
Upvotes: 21
Views: 16408
Reputation: 111336
(A lot has changed since 2011 when this answer was posted - see updates below)
BigInt has been out in V8 (Node.js and Chromium-based browsers) since May 2018. It should land in Firefox 68 - see the SpiderMonkey ticket. Also implemented in WebKit.
BigDecimal hasn't been implemented by any engine yet. Look at alternative library.
It's been over 4 years since I wrote this answer and the situation is much more complicated now.
Now we have:
Soon we'll have:
It means that the number of numeric types available in JavaScript will grow from just one:
to at least the following in WebAssembly:
(Technically the internal representations of all integer types are unsigned at the lowest level but different operators can treat them as signed or unsigned, like e.g. int32.sdiv
vs. int32.udiv
etc.)
Those are available in typed arrays:
asm.js defines the following numeric types:
There is only one number type in JavaScript – the IEEE 754 double precision floating-point number.
See those questions for some consequences of that fact:
Upvotes: 22
Reputation: 3077
Although there is only one type of number in Javascript many programmers like to show that their code works with floating point numbers as well as integers. The reason for showing the decimal point is for documentation.
var isNegative = number < 0 || number == 0 && 1 / number < 0;
This works exactly the same as in the Closure Library. But some programmers reading the code would think that it only worked with integers.
Addendum:- I've recently come accross an article by D. Baranovskiy who makes many criticisms of the Google Closure library and points out that “It’s a JavaScript library written by Java developers who clearly don’t get JavaScript.” He points out more examples of this type confusion, in color.js https://github.com/google/closure-library/blob/master/closure/goog/color/color.js
https://www.sitepoint.com/google-closure-how-not-to-write-javascript/
Upvotes: 5