1

我一直在努力学习 JS,但我似乎无法弄清楚为什么我的布尔值总是返回真或总是假。

所以我相信我了解 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。

他们要么总是返回真,要么总是假。谁能帮我?

4

4 回答 4

3

您需要一种不同的方法来获取字符串的最后一个字符,最好使用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] + '#');

于 2019-04-22T16:55:27.133 回答
2

您可以使用切片

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'));

于 2019-04-22T16:57:20.613 回答
0

JavaScript 中没有负数组索引,而不是char1[-1]你必须使用char1[char1.length - 1].

访问一个字符串字符(例如"abc[1])将始终具有 1 的长度,它永远不会等于""。你的第二个功能更有意义。

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

等于

 return condition;
于 2019-04-22T16:57:25.197 回答
0

该符号[-1]在 JavaScript 中并不隐含地表示“字符串末尾的一个字符”。您可以使用str[str.length - 1]. (如果您期望可能的源字符串为空,您也需要检查它以避免最终出现完全相同的问题。)

而不是if/else返回trueor false,只返回逻辑表达式的结果:

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

两个===比较要么返回要么返回truefalse所以整体表达式值必须是其中之一。然而,一般来说,如果你想绝对确定你最终得到一个布尔值,你可以在表达式前面加上前缀!!来强制标准的 JavaScript “truthy-falsy”评估:

    return !!(expression);
于 2019-04-22T16:57:46.033 回答