News for hackers. Stuff that matters.
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.

[1] https://github.com/jonschlinkert/is-number

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);
  }
Re:NPM – "is-even", 160k weekly downloads by twic on Tuesday November 16, 2021 @02:19PM (#29245181)
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'