+ 3

JS Question

var x = 2; var y = 4; if((y > x || y++ >= 4) && ++y === 5){ x = 1; } else{ x = 4; } console.log(x); // 1 console.log(y); // 5 In this Task, why final value of y isnt 6? Doesnt y increment by 1 after first comparison, since it is true and then increments again by 1 in second comparison, resulting in y = 6 and therefore x = 4

12th Dec 2020, 10:54 AM
David
David - avatar
3 Réponses
+ 4
When either operand of logical OR (||) is truthy-value it evaluates to that truthy-value. In short it returns first truthy operand. Thruthy values: https://developer.mozilla.org/en-US/docs/Glossary/Truthy If first operand of || is truthy second operand is not checked. This is known as "Short Circuit Evaluation". In your case JS doesn't evaluate second operand y++ >= 4 as y>x is true. https://codeburst.io/javascript-what-is-short-circuit-evaluation-ff22b2f5608c example: console.log({ } || [ ]); // object literal is truthy. || returns { } console.log("" || "o"); // empty string is falsy. returns next value "o" which is truthy. console.log(false || null || true || {}); //returns true, the first truthy operand in expression. This can be useful when you want to use some default value. let name = prompt() || "Anonymous"; alert(name); if you press cancel prompt returns null (falsy) in that case - || returns "Anonymous".
12th Dec 2020, 11:25 AM
🇮🇳Omkar🕉
🇮🇳Omkar🕉 - avatar
+ 4
Thanks Omkar for your great explanation and for the sources, It really helped me see the bigger picture. Also thanks lpang for the sources.
12th Dec 2020, 11:44 AM
David
David - avatar
+ 3
What we see here is an effect of short circuit evaluation. You will find answer plus explanations in the following https://en.m.wikipedia.org/wiki/Short-circuit_evaluation https://www.tutorialspoint.com/short-circuit-evaluation-in-javascript
12th Dec 2020, 11:18 AM
Ipang