Return Early Pattern for Function

Tell us what’s happening:
When I am using expression like : if (a && b) >0 then the program does not execute 1 condition ie. (2,-2). Can any one explain what is the difference between : if ((a>0) && (b>0)) or using : if (a && b) >0?

Your code so far


// Setup
function abTest(a, b) {
  // Only change code below this line
  
  if ((a>0) && (b>0)) {

  // Only change code above this line

  return Math.round(Math.pow(Math.sqrt(a) + Math.sqrt(b), 2));
}
else if ((a<0) && (b<0)) {
  return undefined
}
}
// Change values below to test your code
 var test =abTest(2,-2);
 console.log(test);

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36.

Link to the challenge:
https://learn.freecodecamp.org/javascript-algorithms-and-data-structures/basic-javascript/return-early-pattern-for-functions

the Logical AND return one of the two operands, so it can return a non boolean value.

The && expression return the second value if the first one can be converted to true; else, returns the first.

Or in practice

let a = 'test';
let b = 'expression';

a && b // returns 'expression'

So there is a big difference in saying

(a && b) > 0
// and
a > 0 && b > 0

In a case where

a = -1
b = 1

(a && b ) > 0  // true
// -1 && 1 return 1
// 1 > 0 return true

a > 0 && b > 0 // false
// a > 0 false
// b > 0 true
// false && true return false

You can find more info on the MDN page

Thanks a lot Marmiz for detailed explanation, it provided much needed clarification on the results I was getting, I was stuck on that example for the whole day, even after solving it. I think it was a great excercise included in curriculum to clear the important concept.