On Sunday, January 6, 2013, Axel Rauschmayer wrote:

> > Exactly Brendan, I could not agree more and this is my No. 1 pitfall
> about JS: developers often not doing real work complaining about stuff that
> developers doing real work don't even care about or never ever had to worry
> about.
>
> I don’t follow. Who are these people not doing “real work”? And I don’t
> think discussing the language qualifies as complaining.
>
> > In any case they can learn and understand the feature/problem using the
> feature when needed, avoiding its weakness when necessary.
> >
> > About falsy and truthy, null and undefined, who cares ... seriously, and
> to be honest, that's not a pitfall, is rather a feature when needed as it
> is for all other scripting languages as long as you know what you are doing
> ... and no programming language will save you if you don't know what you
> are doing and it's your duty, as developer, to understand the language you
> are using if that's your job.
>
> “Warts” is probably a better term than “pitfalls”.
>
> > Again, about falsy ... if I see a glass empty, it does not mean I used a
> microscope to understand no water is left in the whole glass surface ... I
> just consider that empty and I add water on top.
> >
> > Engineers have the tendency to over complicate even simple tasks as the
> one I've just described ... what is the benefit? What is the result? That
> the day falsy values in JS will disappear libraries authors will implement
> an isFalsy(value) function/method and use it 90% of the time regretting the
> trick with == disappeared ... isn't it ;-)
>
> What is the trick with ==? Note that == does not respect truthiness or
> falsiness:
>
>     > 2 == true
>     false
>     > 2 == false
>     false
>
>     > '2' == true
>     false
>     > '2' == false
>     false


None of these (above) abstract comparison operations represents "truthy" or
"falsy" behaviour.

0 == false;
// true
11.9.3.7 converts to 0==0


"" == false;
// true
11.9.3.7 converts to ""==0
11.9.3.5 converts to 0==0


1 == true;
// true
11.9.3.7 converts to 1==1


"" becomes +0 per 9.3.1
+0 becomes false per 9.2
true becomes 1 per 9.3 table 12


The unary logical NOT ! also converts with ToBoolean.

2==true is just the number two compared with the Boolean true, which aren't
equal in value or type and have no criteria for conversion.

Rick








>
>
> --
> Dr. Axel Rauschmayer
> a...@rauschma.de
>
> home: rauschma.de
> twitter: twitter.com/rauschma
> blog: 2ality.com
>
> _______________________________________________
> es-discuss mailing list
> es-discuss@mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to