Re:NPM – "is-even", 160k weekly downloads
by newsbinator on Tuesday November 16, 2021 @11:53AM
(#29242859)
isNumber would make for a legit package. Is there a good way in javascript to determine confidently if an arbitrary input is a number?
e.g: [1, "one", true, false, 0, "zero", null, undefined]
edit: also ["1", "0", etc]
edit 2: also [NaN]
Re:NPM – "is-even", 160k weekly downloads
by Vilkku on Tuesday November 16, 2021 @12:05PM
(#29243066)
Looks like the author of these packages agrees. While the is-even and is-odd packages are under the i-voted-for-trump user with the description "This is a joke", the is-number package [1] is still kept under the main profile of the author, the repository is still active on GitHub and there are active issues.
Re:NPM – "is-even", 160k weekly downloads
by the_gipsy on Tuesday November 16, 2021 @12:02PM
(#29243027)
typeof v === "number"
The rest is parsing territory.
Re:NPM – "is-even", 160k weekly downloads
by Izkata on Tuesday November 16, 2021 @12:00PM
(#29242981)
“number" == typeof variable
Works for decimals, too.Although maybe you meant to include
"1"
In your examples?
Re:NPM – "is-even", 160k weekly downloads
by madeofpalk on Tuesday November 16, 2021 @12:05PM
(#29243065)
Unfortunately "not a number" is typeof "number"
"number" === typeof NaN
Returns true.
Re:NPM – "is-even", 160k weekly downloads
by dragonwriter on Tuesday November 16, 2021 @01:04PM
(#29244021)
I mean, it depends on context what “numbers” are acceptable. For an overly general solution:
const allowNumbers = {
all: () => true,
notNaN: n => !Number.isNaN(n),
finite: Number.isFinite,
integer: Number.isInteger,
smol: n => Math.abs(n) < Number.EPSILON,
lorge: n => n > Number.MAX_SAFE_INTEGER || n < Number.MIN_SAFE_INTEGER,
}
function isNumber(n, allow = allowNumbers.all) {
return ("number" === typeof n) && allow(n);
}This isn't bad, but for maintainability, it should be split into at least nine packages.
Re:NPM – "is-even", 160k weekly downloads
by marshray on Tuesday November 16, 2021 @02:45PM
(#29245481)
In the type of things that Javascript considers 'numbers', it's a value used to indicate that it's not of the type of things that math considers 'numbers'.
Re:NPM – "is-even", 160k weekly downloads
by organsnyder on Tuesday November 16, 2021 @12:32PM
(#29243490)
That's a tricky one that I think would depend on use case. Yes, of course NaN isn't a number, but it's still kind of a number, depending on context.
Re:NPM – "is-even", 160k weekly downloads
by ohgodplsno on Tuesday November 16, 2021 @12:54PM
(#29243828)
NaN is a float according to IEEE754. All numbers in Javascript being floats, it makes sense that typeof NaN === "number".
Now, the fact that IEEE754 is insane is something else, but JS does nothing wrong (aside from not having not-floats)
Re:NPM – "is-even", 160k weekly downloads
by Ginden on Tuesday November 16, 2021 @01:41PM
(#29244671)
> Now, the fact that IEEE754 is insane is something else, but JS does nothing wrong (aside from not having not-floats)
JS has BigInt - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...
Re:NPM – "is-even", 160k weekly downloads
by ohgodplsno on Tuesday November 16, 2021 @03:10PM
(#29245793)
BigInt is relatively recent, all things considered. JS only having floats is a conception flaw.
Re:NPM – "is-even", 160k weekly downloads
by frankincense on Tuesday November 16, 2021 @12:02PM
(#29243025)
typeof x === 'number' && !Number.isNaN(x)
Re:NPM – "is-even", 160k weekly downloads
by newsbinator on Tuesday November 16, 2021 @12:52PM
(#29243791)
This seems like the best solution.
Any weird edge cases against this one?
Re:NPM – "is-even", 160k weekly downloads
by JasonCannon on Tuesday November 16, 2021 @02:07PM
(#29244997)
Comparing it against the list of examples given in is-number, this solution does not properly handle numbers represented as strings, and it also recognizes Infinity as a number.
Re:NPM – "is-even", 160k weekly downloads
by TheCoelacanth on Tuesday November 16, 2021 @06:18PM
(#29247499)
Because strings aren't numbers and Infinity is a number
Re:NPM – "is-even", 160k weekly downloads
by JasonCannon on Tuesday November 16, 2021 @09:28PM
(#29248734)
Strings are the safest way to hold big numbers in JavaScript due to how JavaScript represents numbers. Also no, infinity is not a number. It's a concept.
Re:NPM – "is-even", 160k weekly downloads
by boomlinde on Thursday November 18, 2021 @04:28PM
(#29270827)
Numbers is a concept. For some purposes it is useful to consider a number that is infinite, which is why concepts like the extended real number line have been invented.
Re:NPM – "is-even", 160k weekly downloads
by mirekrusin on Tuesday November 16, 2021 @01:54PM
(#29244833)
+/- Infinity, better to use Number.isFinite.
Re:NPM – "is-even", 160k weekly downloads
by stagas on Tuesday November 16, 2021 @01:59PM
(#29244891)
Infinities.
Re:NPM – "is-even", 160k weekly downloads
by nsikorr on Tuesday November 16, 2021 @12:55PM
(#29243849)
Number.isFinite() does very well in most cases
Re:NPM – "is-even", 160k weekly downloads
by JohnHaugeland on Tuesday November 16, 2021 @12:01PM
(#29243010)
... typeof foo === 'number'
Re:NPM – "is-even", 160k weekly downloads
by cblconfederate on Tuesday November 16, 2021 @12:08PM
(#29243117)
that is odd
isEven claims to be a learning project. It depends on isOdd and isNumber, both of which were admitted (IIRC) to be explicit NPM download boosting projects. Such that the author of isOdd added it to major modules whenever they could