JavaScript中用于布尔值返回的函数

3

我在 Codecademy 的 Javascript 教程的第 4.1 节遇到了一些问题,无法得到正确的布尔值返回。以下是代码:

// Define quarter here.
var quarter = function(n) {
    if (n / 4 ){
        return true;
    } else {
        return false;
    }
};

if (quarter(4) === 1) {
  console.log("The statement is true.");
} else {
  console.log("The statement is false.");
}

根据我所看到的,我将新定义的季度变量传递给一个带有“n”参数的函数,然后将其除以4来查看它是否返回1作为true,或0(else)作为false。 然后在if循环中使用“quarter”函数来检查传递为“n”的数字“4”的等式是否为1。
我假设这是一些基本逻辑,我只是不习惯使用它(作为前端开发人员希望进入JavaScript编程),但我肯定会欣赏一些想法和指导。
5个回答

16
在JavaScript中,常量truefalse不是数字,它们是一个独立的类型。此外,您正在使用===进行比较,这将明确地防止在比较期间进行类型转换。请注意,除了0之外的所有“n”值的n / 4都将是true(非零)。通常,任何形式的构造都是如此:
if (expression) {
  return true;
}
else {
  return false;
}

可以被替换为:

return !!(expression);

或者,作为替代方案,

return Boolean(expression);

3
"return !!(expression);" 是一个相当可怕的将表达式转换为布尔值的快捷方式,但是这个回答还是很好的。 - Paul Sullivan
嗯,这并不是真正的“可怕”;它只是惯用语。但是各有所好 :-) - Pointy

3
使用===表示您正在请求“严格相等”-不是真假值。这意味着您无法检查数字,因为数字不是严格的true。请参见此SO问题以获取更多详细信息
调用代码应该检查=== true,或者仅跳过显式值比较,只需if (quarter(4)) { ...即可。

3

将您的if语句更改为一致,因为1 != true。三重等号不允许它。

if (quarter(4) == true) {

您的函数也不正确,我认为您想要像这样的东西,如果可以被4整除,则返回:

var quarter = function(n) {
  if (n % 4 == 0){
    return true;
  } else {
    return false;
  }
};

这可以缩短为这样:
var quarter = function(n) {
   return n % 4 == 0;
}

2
额... 真的吗?就这个问题而言,这段代码是等效的。 - Dave Newton
是的,这段代码是等价的 - 百分号符号将返回0或非0。所有正整数都将被解释为TRUE,而0则为false。因此它是等价的。 - Paul Sullivan
1
哦,太棒了。这种速记方式确实更有意义。谢谢! - Matt Zelenak

1

我在这里找不到可行的答案,所以我认为我可能错过了它。我也发现谷歌搜索解决方案对我来说更加糟糕。

我倾向于在Javascript中过度思考解决方案,这显然导致无法解决问题。

您不一定需要return true,但我仍然添加了它。

只需记住逻辑有序的简单性是关键。

    var quarter = function(number) {
        var number = n / 4;
        var n = 48;
    if (quarter(number) % 3 === 0 ) {
        console.log("The statement is true");
        return true;
    } else {
        console.log("The statement is false");
        }
    }

希望这对你有用。

我将利用我缺乏JavaScript技能和知识向像我自己、像您一样的初学者解释这个问题。任何具有极端JavaScript知识的人可能会不同意,但这也是为什么大多数编程雇主会选择沟通专业而不是程序员的原因。

  1. Define a function named quarter, meaning you are defining a function-- quarter -- but you must first define what quarter-- var.
    var quarter = function(number)</code> </pre></li>
    <li>The function returns a value that equals to <pre><code>n / 4
    The function is being defined as
    quarter(number)
    The value is number.
    You then introduce a new var that defines the value with
    number = n / 4
  2. To return true and begin your if statement,

    function(number or n)
    is now quarter, the function you're defining.

  3. The basis of providing a correct equation relies on it returning true in the form of

    console.log("The statement is true!")
    You do this by then defining n with a number that will be divided 4, and then that number being able to be divided by 3 with no remainder.Since number
    has been defined as
    n / 4
    , With n being defined as 48 in this example, both:
    quarter(number)
    and
    quarter(n)
    will work for the if / else statement.
    To bring a remainder of 0 after dividing by 3, use
    % 3 === 0
    .

    1. So
      if (quarter(number) % === 3 {
      is now the defined function quarter.
      number
      is a parameter, and you assign the value of the parameter with variables,
      var number = n / 4
      and
      var n = 48
      .

顺便说一下,我正在输入这个时,理论上这也可以工作并且更短:

    var quarter = function(number) { 
              if (quarter(48) % 3 === 0) {
                 console.log("这个语句是正确的!");
                 return number = number / 4;
              } else { 
                  console.log("这个语句是错误的。");
            };
         };


0

好的,这个问题很麻烦。我现在来解释一下。 你的代码应该像这样:

var quarter = function (number) {
return number/4;
}
if (quarter(48) % 3 === 0 ) {
console.log("The statement is hella true");
} else {
console.log("The statement is hella false brah");
}

你没有通过模块的原因是因为括号中愚蠢的数字必须返回一个真实的语句。 选择一个数字,任何数字,将其乘以(3),然后再乘以(4); 这将使您得到一个值,使模数%为零,并使您的if / else语句为真。
我的贡献给世界, - Aaron

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