It seems dangerous to replace isNaN with someNumber !== someNumber. In that article, they said that isNaN() could return false positives, but I don't actually consider their example to be a false positive at all. I would fully expect isNaN() to return true for a string value. If we replaced that example call to isNaN() with !==, and the result became false instead of true, I would consider it a bug.
In Flash/AIR, isNaN() accepts only type Number. In the JS typedefs, isNaN() accepts anything. I guess if the type of the variable is known to be Number, the compiler could switch to !==. If it's a different type, we should probably keep using isNaN(). For some types, we may even be able to assume that isNaN() will always return true. However, we need to be careful about edge cases. A Number could be stored in type Object, for instance. - Josh On Thu, Aug 3, 2017 at 7:22 AM, Alex Harui <aha...@adobe.com.invalid> wrote: > Here's an article about isNaN is JS. > > http://adripofjavascript.com/blog/drips/the-problem-with- > testing-for-nan-in > -javascript.html > > Maybe the transpiler should not output isNaN and instead "someNumber !== > someNumber" > > -Alex > > On 8/3/17, 6:30 AM, "Harbs" <harbs.li...@gmail.com> wrote: > > >Cool. > > > >I wonder if there’s a difference between Flash and JS. The tests seem to > >indicate that isNaN() is very efficient in JS. It might be an interesting > >project to compare badly performing cases in Flash to their JS > >counterparts. > > > >BTW, I just ran into a case where booleans behave differently in JS than > >AS where initialization would not help. I’ve started my document. I’ll > >add this case. Once the doc starts coming together I’ll share on the > >list. :-) > > > >Harbs > > > >> On Aug 3, 2017, at 3:59 PM, Josh Tynjala <joshtynj...@gmail.com> wrote: > >> > >> Switching away from isNaN() in Feathers improved performance in a > >> measurable way. It wasn't just a guess. > >> > >> - Josh > >> > >> On Aug 2, 2017 11:53 PM, "Harbs" <harbs.li...@gmail.com> wrote: > >> > >> Ah. Thanks. (I haven’t had my coffee yet) ;-) > >> > >> It would be interesting to know if that really is more efficient. > >> > >>> On Aug 3, 2017, at 9:33 AM, Greg Dove <greg.d...@gmail.com> wrote: > >>> > >>> I assume it is if (unknownNumOrNaN != unknownNumOrNaN ) > >>> > >>> I have used things like if (unknownNumOrNaN *0 !=0) in the past but the > >>> above seems better > >>> > >>> > >>> On Thu, Aug 3, 2017 at 6:20 PM, Harbs <harbs.li...@gmail.com> wrote: > >>> > >>>> I’m curious. How does that work? > >>>> unknownNumOrNaN != NaN will always be true > >>>> > >>>>> On Aug 3, 2017, at 1:37 AM, Josh Tynjala <joshtynj...@gmail.com> > >>>>>wrote: > >>>>> > >>>>> Good one! To avoid the overhead of the isNaN() function call, I > >>>> frequently > >>>>> rely on the fact that NaN != NaN. > >>>>> > >>>>> - Josh > >>>>> > >>>>> On Wed, Aug 2, 2017 at 3:32 PM, Harbs <harbs.li...@gmail.com> wrote: > >>>>> > >>>>>> Thanks for the history lesson. :-) > >>>>>> > >>>>>> This does bring up another difference between an initialized value > >>>>>>of > >>>> NaN > >>>>>> and undefined: > >>>>>> > >>>>>> NaN != NaN, while undefined == undefined > >>>>>> > >>>>>>> On Aug 3, 2017, at 1:00 AM, Dave Fisher <dave2w...@comcast.net> > >>>>>>>wrote: > >>>>>>> > >>>>>>> I hate this Macbook’s touch top bar which puts a send button > >>>>>>>directly > >>>>>> above the delete key. > >>>>>>> > >>>>>>>> On Aug 2, 2017, at 2:50 PM, Dave Fisher <dave2w...@comcast.net> > >>>> wrote: > >>>>>>>> > >>>>>>>> Hi Folks, > >>>>>>>> > >>>>>>>> A peanut gallery look at NaN which is really a bit encoding for > >>>> various > >>>>>> kinds of floating point number errors like underflow, overflow, > >>>>>>divided > >>>> by > >>>>>> 0, etc. In my Fortran past life we used XMISS as a special valu > >>>>>>> > >>>>>>> Value. Essentially undefined. > >>>>>>> > >>>>>>> IEEE had very particular definitions and Apple published a book > >>>>>>>about > >>>>>> SANE. > >>>>>>> > >>>>>>> At any rate what you guys are observing is by design: NaN always > >>>> results > >>>>>> in false in any comparison. And it is a number. But it is not a > >>>>>>number > >>>> in > >>>>>> floating point so much as it is an error condition. > >>>>>>> > >>>>>>> > >>>>>>>https://na01.safelinks.protection.outlook.com/?url= > https%3A%2F%2Fsta > >>>>>>>ckoverflow.com%2Fquestions%2F1565164%2Fwhat- > is-the-&data=02%7C01%7C% > >>>>>>>7Cf21eaebf1ebe4106701408d4da73e58d%7Cfa7b1b5a7b34438794aed2c178de > cee > >>>>>>>1%7C0%7C0%7C636373638698893388&sdata=y0% > 2BkjVQhq9ALdDR5QSKUVtzmggB66 > >>>>>>>8usWbRnc9fZFC8%3D&reserved=0 > >>>>>> rationale-for-all-comparisons-returning-false-for-ieee754- > nan-values > >>>>>>> > >>>>>>> > >>>>>>>https://na01.safelinks.protection.outlook.com/?url= > https:%2F%2Fpeopl > >>>>>>>e.eecs.berkeley.edu%2F~wkahan%2Fieee754status% > 2FIEEE754.PDF&data=02% > >>>>>>>7C01%7C%7Cf21eaebf1ebe4106701408d4da73 > e58d%7Cfa7b1b5a7b34438794aed2c > >>>>>>>178decee1%7C0%7C1%7C636373638698893388&sdata= > ZNxIS0ccBrtUNO%2B4hto7a > >>>>>>>e425rLH2x1H0MDK7uA5pio%3D&reserved=0 > >>>>>>> > >>>>>>> My father complained about when the IBM 360 came out in the early > >>>> 1960’s > >>>>>> he had to go to doubles because the IBM architecture went from 6 - 6 > >> bit > >>>>>> words for a single to 4 - 8 bit words. The practical result was > >>>>>>twice > >> as > >>>>>> much magnetic tape both length and number of reals. > >>>>>>> > >>>>>>> Regards, > >>>>>>> Dave > >>>>>>> > >>>>>>>> > >>>>>>>>> On Aug 1, 2017, at 3:21 PM, Greg Dove <greg.d...@gmail.com> > >>>>>>>>>wrote: > >>>>>>>>> > >>>>>>>>> Yes it does. NaN is an 'instance' of the Number type (even > >>>>>>>>>though it > >>>> is > >>>>>>>>> 'Not a Number' ;) ) > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> On Wed, Aug 2, 2017 at 10:18 AM, Harbs <harbs.li...@gmail.com> > >>>> wrote: > >>>>>>>>> > >>>>>>>>>> Interesting. > >>>>>>>>>> > >>>>>>>>>> I’m not sure that I realized that NaN passes that test. Does it? > >>>>>>>>>> > >>>>>>>>>>> On Aug 2, 2017, at 1:12 AM, Greg Dove <greg.d...@gmail.com> > >>>>>>>>>>>wrote: > >>>>>>>>>>> > >>>>>>>>>>> I agree undefined works the same as NaN for many things for > >>>> example, > >>>>>> but > >>>>>>>>>> it > >>>>>>>>>>> fails on very basic things like if (x is Number) > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>> > >>>>>>> > >>>>>> > >>>>>> > >>>> > >>>> > > > >