为什么即使不满足条件,用JS编写的Function也会返回true?

时间:2019-03-18 14:13:04

标签: javascript

我才刚刚开始学习Javascript,我们的第一批作业之一是经典的check_if_palindrome函数。我不明白我的代码有什么问题。

function palindrome(str1) {
  console.log(str1.split('').reverse().join(''));
  console.log(str1);

  if (str1 == str1.split().reverse().join('')) {
    return (true)
  } else {
    return (false)
  }
}

if (palindrome('wow442421') == true) {
  console.log('YES')
} else {
  console.log('NOPE');
}

2 个答案:

答案 0 :(得分:2)

第二个''中缺少split()。不要重复代码,因为它容易出错,您应该使用变量保存结果并在必要时重新使用它:

function palindrome(str1) {
  const reversed = str1.split('').reverse().join('');
  console.log(str1, reversed);

  if (str1 === reversed){
    return true
  } else {
    return false
  }
}

if (palindrome('wow442421') === true) {
  console.log('YES')
} else{
  console.log('NOPE');
}

此外,由于str1 === str1.split('').reverse().join('')已经返回了布尔值,因此只需返回此值,就不必使用if/else语句:

function palindrome(str) {
  return str.split('').reverse().join('') === str;
}

if (palindrome('wow442421')) {
  console.log('YES')
} else{
  console.log('NOPE');
}

如果要使其更加简洁,可以执行以下操作:

const isPalindrome = str => str === [...str].reverse().join('')

console.log(isPalindrome('wow44'));
console.log(isPalindrome('Roma amoR'));

答案 1 :(得分:0)

您应该使用split('')而不是split()split()将在每个空格字符处分割,split('')将在每个字符处分割,这就是您想要的:

function palindrome(str1) {
  if (str1 == str1.split('').reverse().join('')) {
    return true;
  } else {
    return false;
  }
}

if (palindrome('wow442421') == true) {
  console.log('YES')
} else {
  console.log('NOPE');

}