Как кодировать if-оператор с коротким замыканием - PullRequest
1 голос
/ 03 июня 2019

Я новичок в 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') возвращает значение undefined.

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

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

Ответы [ 2 ]

3 голосов
/ 03 июня 2019

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');
  }
}
1 голос
/ 03 июня 2019

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

function checking(input) {

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

}

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

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

...