if语句没有返回真值

6
我应该得到一个可以被2整除的数字,我已经做到了。但是我不确定为什么我的代码没有起作用。我正在学习JavaScript课程。我收到的错误是:
“糟糕,再试一次。看起来你的函数在number = 2时返回false。请检查if / else语句内的代码是否正确,如果接收到的数字是偶数,则返回true。”
问题是:
在isEven函数中编写if / else语句。如果接收到的数字可以平均地被2整除,它应该返回true。否则(else),它应该返回false。确保返回 - 不要使用console.log()!
我的代码:
var isEven = function(number) {
// Your code goes here!
  if(4 % 2) {
      return true;
  } else {
      return false;
  }
};

我做错了什么?


4
"4" 应该改为 "number"。 - Alex K.
"number" 是您函数的形式参数。 - Pointy
number是您为参数输入的名称,因此在函数中,在isEven(42)之后,number包含42,即您要测试的内容%2 - Alex K.
1
而且,4%2会给你0,这是虚假的 - Matt Burland
可能是测试一个值是奇数还是偶数的重复问题。 - But I'm Not A Wrapper Class
显示剩余2条评论
3个回答

9

Try this

var isEven = function(number) {
  if(number % 2 === 0) {
      return true;
  } else {
      return false;
  }
};

console.log(isEven(4));
console.log(isEven(3));
console.log(isEven(6));

在一行中更美观

var isEven = function(number) {
  return number % 2 === 0;
};

console.log(isEven(4));
console.log(isEven(3));
console.log(isEven(6));


3
其他答案在我撰写这篇文章时是正确的,但需要解释一下:
var isEven = function(number) {
// Your code goes here!
  if(4 % 2) {
      return true;
  } else {
      return false;
  }
};

% 这是取模运算符。它返回一个值。取模告诉你除法后剩下的余数。因此,4模2返回0,因为没有剩余的部分。这就是为什么你需要根据返回值进行检查。

var isEven = function(number) {
// Your code goes here!
  if(4 % 2 == 0) {
      return true;
  } else {
      return false;
  }
};

如果没有余数,那么它是一个偶数,因为2可以整除它,不留下任何余数。所以3模2返回1,因为2只能整除三一次,剩下1。
根据下面的评论(似乎已删除),在谈论正负数时,模和余数之间存在差异,但对于严格讲解javascript运算符,它是定义如下:
当一个操作数被另一个操作数除后,余数运算符返回剩余的余数。它总是采用被除数的符号,而不是除数的符号。它使用内置的模函数来产生结果,即将var1除以var2的整数余数,例如var1模var2。有一个提案在ECMAScript的未来版本中获得实际的模运算符,其区别在于模运算符的结果将采用除数的符号,而不是被除数的符号。
此外,您在if语句中硬编码了4,因此它将始终返回true!该函数的参数是number。
来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators
var isEven = function (number) {
    // Your code goes here!
    if (number % 2 == 0) {
        return true;
    }
    else {
        return false;
    }
};

谢谢你的好回答!为什么其他人说要使用number参数?我从来没有定义过它,如果`number % 2 === 0'是正确的,那怎么可能呢?我尝试了一下,结果是正确的。我只是不明白为什么。 - Becky
@Becky 在函数定义行中看到 "var isEven = function(number) {", 函数括号内是你定义函数输入或参数的地方。你定义了一个名为 number 的参数。这样你就可以传入一个值并测试它是否符合函数要求。所以每当你这样做:isEven(30),在函数内部,参数 number 现在保存着值 30。同时没问题!很高兴能帮助到你 =] - AtheistP3ace
明白了,我只是在编写一个if语句,稍后如果给number赋值,它就会进行测试。 - Becky
正确。你的if语句将始终返回true,因为4模2将始终返回0。使用定义的参数数字使函数具有动态性,因为其结果取决于每次调用函数时可以更改的变量。 - AtheistP3ace
@Becky 如果你正在使用类似Codecademy的东西,他们会为你插入一个参数数字,不需要自己调用函数。 - nihiser

1
在if语句中,4%2的结果是0,因此在if语句中会得到false,这就是为什么它不起作用的原因。
请更改if语句为:
if(4%2==0)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接