【问题标题】:Why does my javascript function return true when it should return false [duplicate]为什么我的javascript函数应该返回false时返回true [重复]
【发布时间】:2020-04-26 02:18:08
【问题描述】:

这个我想不通。

字符串 s 的值为“john”。

我的函数应该返回mike和john在s中出现的次数是否相同。

它正确地将 mike 的计数打印为 0。 它正确地将 john 的计数打印为 1。

然而,在检查两者是否相等之后,它返回 true!为什么?

function solve(s) {
  // Write your code here
  var countm = (s.match(/mike/g) || []).length;
  var countj = (s.match(/john/g) || []).length;
  console.log(countm);
  console.log(countj);

  if (countm == countj) {
    return Boolean("true");
  } else {
    return Boolean("false");
  }

}
console.log(solve('john'));

【问题讨论】:

  • 这是因为“false”字符串是truthy value。您可以简单地返回条件语句,countm == countj
  • Boolean("false") === Boolean("true") === true
  • 一些观察:返回原始布尔值。不要return Boolean('true'),只需return true;。它是一个基本的 JS 原语(也是大多数其他语言)。另外,不要使用if (x) { return true} else { return false }:只需返回那个测试:return (countm === countj),完成交易。请注意,不要使用==,它告诉JS 进行任何类型转换以获得结果,使用===,这是strict 相等。最后,不要使用match,使用test(/john/).test(s)(没有g)将是一个真或假值,所以你不需要奇怪的数组回退和.length

标签: javascript


【解决方案1】:

Boolean() 获取传递的字符串并检查其真实性。由于您在两种情况下都传递了字符串“true”/“false”,因此它们的真实性被正确评估为 true!

删除引号,您的代码应该可以正常工作

但正如其他人评论的那样,您应该只是return truereturn false,或者返回评估return countm === countj

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多