Это работает, но я не понимаю, почему:
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"));
Почему "истина" для "Да" превосходит всех фальсов?
Для всех символов вы можете просто вернуться (ранний выход), если вы нашли одну заглавную букву - в случае нижнего регистра вам нужно выполнить итерацию до конца строки.
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"));
Эта функция проверяет только первый символ данного входа. Если первый символ находится в верхнем регистре, он возвращает true, иначе он возвращает false. Функция завершается после первой итерации.
Поэтому, если заданный вход подобен "yEs", он возвращает false. Поскольку он проверяет только первый символ "y" и выходит.
Ваши проблемы связаны с return false
инструкции, которая возвращает функцию для первого символа без верхнего регистра. То, как оно построено, оно всегда будет возвращаться после первого символа. Другие уже дали вам решения, я дам вам более сжатый способ добиться того же:
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'));
return
немедленно покидает функцию.hasUppercase("ayyLmao")
возвращает false.