IMO, it matters whether you are strictly/strongly typing or not. I have not spent the time to see what the compiler does for:
var foo:String; if (isNaN(foo)) Do you get a compiler error? Or is it allowed and auto-coercion in the Flash runtime will do what JS does? You are correct that if you never compile against the SWF target you will be allowed to pass things other than Number into isNaN. I wonder if we should change that? I agree that we probably can't change all isNaN calls to "someNumber !== someNumber" and only those where we know the thing passed in is a Number, but on the other hand, I think if you have compiled against the Flash isNaN, the thing passed in must always be a Number. -Alex On 8/3/17, 7:42 AM, "Josh Tynjala" <joshtynj...@gmail.com> wrote: >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. >> >> >>https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fadripofja >>vascript.com%2Fblog%2Fdrips%2Fthe-problem-with-&data=02%7C01%7C%7C918c1ea >>c90934780354c08d4da7dfef4%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C63 >>6373682092107341&sdata=Lro5rBYWF4lnJEAmcHTzMT0GIhCnI8Zgp7E8af9DLlw%3D&res >>erved=0 >> 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) >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>> >> >>>>>>> >> >>>>>> >> >>>>>> >> >>>> >> >>>> >> > >> >>