Почему Javascript дает результат как Number вместо True/False для выражения?

В моем приложении сегодня я работал с JavaScript-кодом, когда заметил что-то странное.

var someVar = 25; 
var anotherVar = 50; 
var out = (anotherVar == 50 && someVar); 


console.log(out) // outputs 25 and not true or false;

Любая идея, что происходит?

Ответ 1

Как указано на странице логических операторов MDN, оператор &&:

Возвращает expr1, если его можно преобразовать в false; в противном случае возвращает expr2. Таким образом, при использовании с булевыми значениями && возвращает true, если оба операнда истинны; в противном случае возвращает false.

В вашем случае expr1 (anotherVar == 50) является истинным (не false), поэтому он возвращает expr2 (someVar), который равен 25.

Он не возвращает true или false, потому что expr2 не является логическим значением.

Спецификация ECMA-262:

Значение, созданное оператором && или ||, необязательно имеет тип Boolean. Выводимое значение всегда будет значением одного из двух выражений операнда.