• JavaScript vs. C/C++ behavior

    From Digital Man@VERT to All on Wed May 1 14:08:54 2019
    In C/C++:
    i = 0 || 2; // i == 1
    In JavaScript:
    i = 0 || 2; // i == 2

    What about Java, C# or other C-like languages?

    digital man

    Synchronet "Real Fact" #91:
    Captured chat with Wayne Bell: http://wiki.synchro.net/history:waynebell_chat Norco, CA WX: 70.9F, 49.0% humidity, 6 mph ESE wind, 0.00 inches rain/24hrs

    ---
    Synchronet Vertrauen Home of Synchronet [vert/cvs/bbs].synchro.net
  • From echicken@VERT/ECBBS to Digital Man on Wed May 1 17:46:09 2019
    Re: JavaScript vs. C/C++ behavior
    By: Digital Man to All on Wed May 01 2019 14:08:54

    In C/C++:
    i = 0 || 2; // i == 1
    In JavaScript:
    i = 0 || 2; // i == 2

    What about Java, C# or other C-like languages?

    IIRC in Java this won't work at all, as it wants both operands to be boolean. This caused me some mild annoyance a while back. I think it's the same in C#.

    ---
    echicken
    electronic chicken bbs - bbs.electronicchicken.com - 416-425-5435
    Synchronet electronic chicken bbs - bbs.electronicchicken.com
  • From Mortifis@VERT/ALLEYCAT to Digital Man on Tue May 21 00:51:25 2019
    In C/C++:
    i = 0 || 2; // i == 1
    In JavaScript:
    i = 0 || 2; // i == 2

    What about Java, C# or other C-like languages?

    digital mam

    in c-like languages (depending on how a function evokes an evaluation) if the Boolean callback is neither 0 nor 2 it will return a 1 as represented by the induction of i, anything greater than 0 but less than 2 is 1) ... in JS if the callback is greater than the initial state (0) then it is forced to 2 .. risking looking like a moron ... there wasn't much meat on the bone in question ... either way, it's all about OS calls/callbacks ... hold it, where's my beer? :-)




    The Granny Lane, where seasoned drivers slow down and smell the blacktop roses

    ---
    Synchronet AlleyCat! BBS - http://alleycat.synchro.net:81
  • From Fort Exile@VERT to Mortifis on Sun Jul 7 10:03:29 2019
    Re: Re: JavaScript vs. C/C++ behavior
    By: Mortifis to Digital Man on Tue May 21 2019 12:51 am

    In JavaScript:
    i = 0 || 2; // i == 2

    the induction of i, anything greater than 0 but less than 2 is 1) ... in JS if the callback is greater than the initial state (0) then it is forced to 2 .. risking looking like a moron ... there wasn't much meat on the bone in

    The trouble with boolean operations in JavaScript is the concept of "truthy" anf "falsy" values. Javascript will always try and make a boolean comparison work, even if it is not comparing two boolean values. Thus, we wind up with "falsy" values that evaluate to FALSE when compared, and "truthy" values that evaluate to TRUE.

    The "falsy" values are: FALSE, 0, "" '' and `` (the empty string), null, undefined, and NaN.

    The "truthy" values are everything else, including empty objects and arrays.

    This particular assignment does a boolean OR comparison. The first element that is "truthy" is the one that is assigned to the variable. Since 0 is always a "falsy" value, it is skipped, and we wind up with i === 2.

    ---
    Synchronet Vertrauen Home of Synchronet [vert/cvs/bbs].synchro.net
  • From Digital Man@VERT to Fort Exile on Sun Jul 7 13:15:32 2019
    Re: Re: JavaScript vs. C/C++ behavior
    By: Fort Exile to Mortifis on Sun Jul 07 2019 10:03 am

    Re: Re: JavaScript vs. C/C++ behavior
    By: Mortifis to Digital Man on Tue May 21 2019 12:51 am

    In JavaScript:
    i = 0 || 2; // i == 2

    the induction of i, anything greater than 0 but less than 2 is 1) ... in JS if the callback is greater than the initial state (0) then it is forced to 2 .. risking looking like a moron ... there wasn't much meat on the bone in

    The trouble with boolean operations in JavaScript is the concept of "truthy" anf "falsy" values. Javascript will always try and make a boolean comparison work, even if it is not comparing two boolean values. Thus, we wind up with "falsy" values that evaluate to FALSE when compared, and "truthy" values that evaluate to TRUE.

    The "falsy" values are: FALSE, 0, "" '' and `` (the empty string), null, undefined, and NaN.

    NaN != false or true.

    The "truthy" values are everything else, including empty objects and arrays.

    This particular assignment does a boolean OR comparison. The first element that is "truthy" is the one that is assigned to the variable. Since 0 is always a "falsy" value, it is skipped, and we wind up with i === 2.

    And the original implementation of JavaScript/LiveScript didn't actually behave that way, which is interesting. It was introduced as a "feature" as I suspect much of the languages weird (and cool) warts were.

    digital man

    Synchronet "Real Fact" #50:
    JAM and Squish were considered before developing Synchronet Message Base format.
    Norco, CA WX: 76.7F, 61.0% humidity, 0 mph S wind, 0.00 inches rain/24hrs

    ---
    Synchronet Vertrauen Home of Synchronet [vert/cvs/bbs].synchro.net