console.log
возвращает undefined
, что соответствует Falsey, поэтому
((input==1 && console.log('yes')) || console.log('no'))
// equivalent to:
((true && console.log('yes')) || console.log('no'))
((true && undefined ) || console.log('no'))
(( undefined ) || console.log('no'))
Таким образом, второй console.log
также выполняется, потому что часть в первых скобках оценивается как выражение Falsey.
Полагаю, вы могли бы изменить логику, чтобы часть console.log
была частью другого выражения, которое оценивается как true
:
checking(1);
function checking (input) {
((input==1 && (console.log('yes')) || true) || console.log('no'))
}
Но это действительно, очень странно сделать, вместо этого используйте условный оператор:
checking(1);
function checking (input) {
console.log(
input === 1
? 'yes'
: 'no'
);
}
или if
/ else
, если вам нужно несколько выражений, а не одно выражение на основе условия:
checking(1);
function checking (input) {
if (input === 1) {
console.log('yes');
// do something depending on input 1
} else {
console.log('no');
}
}