Есть ли способ уточнить истинные и ложные утверждения в этом JS? - PullRequest
1 голос
/ 22 апреля 2019

Я работал над изучением JS, и я не могу понять, почему мои логические значения возвращаются либо всегда true, либо всегда false.

Так что я верю, что понимаю основы правдивой / ложной ситуации в JS, но, похоже, не могу понять это правильно.Я знаю, что существуют проблемы с типом данных (нельзя заставить разные типы данных делать разные вещи).

function lastCharacter(char1, char2) {
  if (char1[-1] === '' && char2[-1] === '') {
    return true;
  } else {
    return false;
  }
}

console.log(lastCharacter('apple', 'pumpkine'));

Или

function lastCharacter(char1, char2) {
  if (char1[-1] === char2[-1]) {
    return true;
  } else {
    return false;
  }
}

console.log(lastCharacter('apple', 'pumpkina'));

Определить функцию lastCharacter, которая принимает две строки в качестве аргументов.lastCharacter должен возвращать true, если обе строки заканчиваются одним и тем же символом.В противном случае lastCharacter должен вернуть false.

Они либо возвращают всегда true, либо всегда false.Кто-нибудь может мне помочь?

Ответы [ 4 ]

4 голосов
/ 22 апреля 2019

Вам нужен другой метод для получения последнего символа строки, предпочтительно с String#slice и отрицательным значением для получения последнего.Затем сравните и верните результат.

function lastCharacter(string1, string2) {
    return string1.slice(-1) === string2.slice(-1);
}

console.log(lastCharacter('apple', 'pumpkine'));

Сравнение между взятием последнего символа пустой строки с использованием индекса -1, который возвращает undefined и slice, который возвращает пустую строку.

var x = '';

console.log('#' + x.slice(-1) + '#');
console.log('#' + x[x.length -1] + '#');
3 голосов
/ 22 апреля 2019

Вы можете использовать ломтик

function lastCharacter(char1, char2) {
  return char1.slice(-1) === char2.slice(-1)
}

console.log(lastCharacter('apple', 'pumpkina'));
console.log(lastCharacter('apple', 'snake'));

Или вы можете просто получить доступ к последнему индексу

function lastCharacter(char1, char2) {
  return char1[char1.length-1] === char2[char2.length-1]
}

console.log(lastCharacter('apple', 'pumpkina'));
console.log(lastCharacter('apple', 'snake'));
0 голосов
/ 22 апреля 2019

Обозначение [-1] не означает неявно "один символ от конца строки" в JavaScript.Вы можете использовать str[str.length - 1].(Если вы ожидаете появления возможных пустых исходных строк, вы также захотите проверить это, чтобы избежать такой же проблемы.)

Вместо if/else, который возвращает либо true, либо * 1007.*, просто верните результаты логического выражения:

    return char1[char1.length - 1] === '' && char2[char2.length - 1] === '';

Оба сравнения === в любом случае возвращают либо true, либо false, поэтому общее значение выражения должно быть одним из них.В общем, однако, если вы хотите быть абсолютно уверенным, что в конечном итоге вы получите логическое значение, вы можете добавить префикс к выражению !!, чтобы заставить стандартную оценку JavaScript «истинно-ложное»:

    return !!(expression);
0 голосов
/ 22 апреля 2019

В JavaScript нет отрицательных индексов массива, вместо char1[-1] необходимо использовать char1[char1.length - 1].

Доступ к одному из символов строки (например, "abc[1]) всегда будет иметь длину 1, оно никогда не будет равно "".Ваша вторая функция имеет больше смысла.

Также

 if(condition) { return true; } else { return false; }

равно

 return condition;
...