Subj : Re: JavaScript vs. C/C++ behavior To : Fort Exile From : Digital Man Date : Sun Jul 07 2019 01:15 pm 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.7øF, 61.0% humidity, 0 mph S wind, 0.00 inches rain/24hrs --- þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net .