你好,我有一个问题,虽然我知道答案但是无法用语言表达(最好的说法是“我不知道为什么”)。我正在为我的初级开发人员(他们非常初级)准备一个简单的测试,如下所示...
编写一个名为fooBar的函数,它接受一个参数
- 如果参数是3的倍数,则返回“foo”
- 如果参数是5的倍数,则返回“bar”
- 如果参数既是3的倍数又是5的倍数,则返回“fooBar”
- 否则返回原始参数
我希望或期望得到以下答案:
function fooBar (n) {
if ((n % 3 === 0) && (n % 5 === 0)) {
return "fooBar";
} else if (n % 3 === 0) {
return "foo";
} else if (n % 5 === 0) {
return "Bar";
} else {
return n;
}
}
一切都很好,但我希望能够在以下所有情况中使函数正常工作或逻辑上合理,除了一个情况,我想要捉弄那些初学者。
fuzzBuzz(3); // returns "foo"
fuzzBuzz(5); // returns "Bar"
fuzzBuzz(15); // returns "fooBar"
fuzzBuzz(true); // returns true
fuzzBuzz(false); // returns "fooBar"
fuzzBuzz(function(){return true;}); // returns "function anonymous()"
当我们传递
false
时,我们会得到一个意外的结果,因为(false % 3 === 0)
和(false % 5 === 0)
等于true
。我期望这个...我只是无法解释为什么,有人能用语言解释一下为什么会出现这种奇怪的行为吗?我曾经认为这是JavaScript的“怪癖”!
%
将false
转换为数字,这个数字应该是0。然后逻辑就会正确地跟进。 - James Thorpe