有没有办法弄清楚这个JS中的真假语句?

Is there a way to clarify the true and false statements in this JS?

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

所以我相信我了解 JS 中 truthy/falsy 情况的基础知识,但我似乎无法正确理解。我知道存在数据类型问题,(不能让不同的数据类型做不同的事情)。

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 应该 return 为真。 否则,lastCharacter 应该 return false。

它们要么return总是正确的,要么总是错误的。谁能帮帮我?

您需要一种不同的方法来获取字符串的最后一个字符,最好使用 String#slice 和负值来获取最后一个字符。然后比较 return 结果。

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

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

使用索引-1取空字符串的最后一个字符return与undefinedslice的比较,return是一个空字符串。

var x = '';

console.log('#' + x.slice(-1) + '#');
console.log('#' + x[x.length -1] + '#');

你可以使用切片

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

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

而不是 char1[-1]

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

还有

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

等于

 return condition;

符号 [-1] 并不意味着 JavaScript 中的 "one character from the end of the string"。您可以使用 str[str.length - 1]。 (如果您希望源字符串可能为空,您也需要检查一下以避免出现完全相同的问题。)

而不是 return 是 truefalseif/else,只是 return 逻辑表达式的结果:

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

无论如何,=== 比较 return truefalse,因此整体表达式值必须是其中之一。一般来说,但是如果你想绝对确保你最终得到一个布尔值,你可以在表达式前加上 !! 来强制标准 JavaScript "truthy-falsy" 评估:

    return !!(expression);