Как закодировать оператор if с помощью короткого замыкания

Я новичок в JavasSript и пытаюсь закодировать оператор if с коротким замыканием.

В приведенном ниже коде первый пытается увидеть, равен ли вход 1, показать на странице консоли «да», иначе «нет».

function checking (input) {
    ((input==1 && return 'yes') || return 'no')
}

Однако по какой-то причине я мог видеть как «да», так и «нет», когда ввод равен 1. Я попытался протестировать, заменив return на console.log:

checking(1); 
function checking (input) {
    ((input==1 && console.log('yes')) || console.log('no'))
}
// output => yes 
// output => no

Затем я понял, что console.log('yes') возвращает «неопределенное».

Как я могу это исправить?

И как мне заменить console.log() на return? Более ранний код с возвратом вызывает синтаксическую ошибку.


person vincent    schedule 03.06.2019    source источник


Ответы (2)


console.log возвращает undefined, что неверно, поэтому

((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 тоже работает, потому что часть в первых скобках оценивается как ложное выражение.

Я полагаю, вы могли бы изменить логику так, чтобы часть 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');
  }
}

person CertainPerformance    schedule 03.06.2019

Вы можете использовать тернарный оператор, который используется так:

function checking(input) {

  return input === 1 ? "yes" : "no";

}

Если value равно 1, то будет возвращено "yes", если нет, будет возвращено "no".

Надеюсь, мой ответ немного помог.

person technolaaji    schedule 03.06.2019