Поведение возвращаемой переменной в функции Javascript

1

Это работает, но я не понимаю, почему:

function hasUppercase(input) {
  for (var i = 0; i < input.length; i++) {
    if (input[i] === input[i].toUpperCase()) {
      return true
    } else { 
      return false
    }
  }
}

console.log(hasUppercase("no"));
console.log(hasUppercase("Yes"));

Почему "истина" для "Да" превосходит всех фальсов?

  • 3
    Оператор return немедленно покидает функцию.
  • 1
    Эта функция не работает. hasUppercase("ayyLmao") возвращает false.
Показать ещё 2 комментария
Теги:

3 ответа

1

Для всех символов вы можете просто вернуться (ранний выход), если вы нашли одну заглавную букву - в случае нижнего регистра вам нужно выполнить итерацию до конца строки.

function hasUppercase(input) {
    for (var i = 0; i < input.length; i++) {
        if (input[i] === input[i].toUpperCase()) {
            return true;
        }
    }
    return false;
}

console.log(hasUppercase("no"));
console.log(hasUppercase("Yes"));
console.log(hasUppercase("yeS"));
  • 0
    Это почти точная копия ответа, который я выложил несколькими минутами ранее
  • 0
    верно, но текст другой.
Показать ещё 2 комментария
0

Эта функция проверяет только первый символ данного входа. Если первый символ находится в верхнем регистре, он возвращает true, иначе он возвращает false. Функция завершается после первой итерации.

Поэтому, если заданный вход подобен "yEs", он возвращает false. Поскольку он проверяет только первый символ "y" и выходит.

0

Ваши проблемы связаны с return false инструкции, которая возвращает функцию для первого символа без верхнего регистра. То, как оно построено, оно всегда будет возвращаться после первого символа. Другие уже дали вам решения, я дам вам более сжатый способ добиться того же:

ES2015 (ES6)

const hasUpperCase = in => in.split('').some(c => c === c.toUpperCase());

// Demo:
console.log(hasUpperCase('no'));
console.log(hasUpperCase('yeS'));

Предыдущие версии

function hasUpperCase(input) {
  return input.split('').some(function isCharUpperCase(char) {
    return char === char.toUpperCase();
  });
}

// Demo:
console.log(hasUpperCase('no'));
console.log(hasUpperCase('yeS'));

Ещё вопросы

Сообщество Overcoder
Наверх
Меню