【问题标题】:What do I need to do to make this if statement work properly? [duplicate]我需要做什么才能使这个 if 语句正常工作? [复制]
【发布时间】:2018-05-29 17:19:04
【问题描述】:

我应该完成下面显示的提供的函数“爬升”。在函数爬升中使用内置的局部变量参数。

这就是函数要做的事情:

如果 arguments[0] 处有一个字符串,但 arguments[1] 是假的,则返回“On belay?”。

如果arguments[0]处有字符串,arguments[1]处为真, 返回“攀登!”

否则,返回“让我们在攀爬之前设置保护绳。”

必须通过这些测试:

should be a function that does not have built-in parameters
should return "Let's set up the belay rope before we climb." if called as climb()
should return "Climbing!" if called with climb("Benny", true)
should return "Climbing!" if called with climb("any string here", true)
should return "On belay?" if called with climb("Benny", false)
should return "On belay?" if called with climb("any string here")

这里是提供的功能:

function climb(){

  //CODE HERE - DO NOT TOUCH THE CODE ABOVE!

}

这是我正在尝试的,但它不起作用:

function climb(){

  //CODE HERE - DO NOT TOUCH THE CODE ABOVE!

  if(arguments[0]){
    if(arguments[1]==false){
      return "On belay?";
    } else { 
      return "Climbing!";
    }
  } else {
    return "Let's set up the belay rope before we climb.";
  }
}

【问题讨论】:

  • 短语“内置局部变量参数”没有任何意义。如果它们是局部变量,它们就不是参数。
  • 您引用的代码中没有任何内容可以测试您在文本中描述的条件...?分配通常不是任意的。您的讲师、教程或课程将涵盖使您能够做到这一点的必要主题。我建议您查看您的课程资料、课堂笔记等,然后再尝试完成这项工作。 如果您遇到特定问题,请彻底研究它,search thoroughly here,如果您仍然遇到问题,请发布您的代码和问题描述。人们会很乐意提供帮助。
  • 我当然希望 arguments[0] 等于它自己。
  • @epascarello - 它通常会。如果是NaN,则不会。但是当然,上面是'',所以...
  • 我们不再使用arguments。我们曾经使用它的唯一原因是用于具有可变数量参数的“可变参数”函数,但现在我们为此使用扩展参数 (...args)。为什么你的老师要求你做一个涉及arguments的作业,而不是只使用命名参数?我建议找一个新老师,一个新班级,或者可能是一所新大学。如果您打算使用arguments,我强烈建议您了解它的含义。这不是你设置的东西,就像你正在做的那样;它表示传入函数的参数。

标签: javascript arguments


【解决方案1】:

如果我理解正确,您的函数需要基于局部变量而不是输入参数工作。

话虽如此,您的比较没有多大意义。 例如。 arguments[0] == arguments[0] 应该始终返回 true,因为它正在与自身进行比较。

试试类似的东西

//check that arg[0] has a value (assuming it is a string)
 if(arguments[0]){
   if(arguments[1]==false){
     return "On belay?";
   } else { //arguments[1] == false is implicit here
     return "Climbing";
   }
 } else {
   return "Let's set up the belay rope before we climb.";
 }

还要注意!=(不等)和!==(不等值或不等类型)之间的区别。

【讨论】:

  • 谢谢。这几乎可以工作。它只是没有通过我要求的测试之一。它还需要返回“On belay?”如果使用爬升(“任何字符串”)调用。
  • 是否可以进行一些小改动以使其发挥作用?
  • 我以为你不想要函数的任何参数?或者如果只有第一个参数而没有第二个参数,您是否想返回“on belay”?我不确定我是否正确理解了您的要求。
  • 你是对的,我不能有函数的参数,但我打算通过这些测试:应该是一个没有内置参数的函数 - 应该返回“让我们设置保护在我们攀爬之前先用绳子。”如果调用为climb() - 应该返回“Climbing!”如果使用爬升(“Benny”,true)调用 - 应该返回“Climbing!”如果使用爬升(“此处的任何字符串”,true)调用 - 应该返回“在保护上?”如果使用爬升(“Benny”,false)调用 - 应该返回“在保护?”如果用爬升(“这里的任何字符串”)调用 -
  • 请检查您最初的问题是否与您刚刚写的内容相矛盾,因为它们是矛盾的: 问题:我要使用内置的局部变量参数编写一个函数。 评论:应该是一个没有内置参数的函数用正确的问题编辑你的问题,我想这是第二个。
【解决方案2】:

arguments[0] == arguments[0] 总是true 因为你正在检查它是否等于它自己。还要检查一个元素是否为真,您只需执行if(element) 您的代码应如下所示:

if(arguments[0] != '') {
  if(arguments[1]){
    return "On belay?";
   }
   else {
    return "Climbing";
   }

} else {
  return "Let's set up the belay rope before we climb."
}

【讨论】:

  • 我很遗憾不得不成为“那个人”,但如果 arguments[0] 恰好是 NaN,那么比较将失败。
  • 你说得对,我假设它不会,因为 OP 在开始时将其设置为 ''
  • @Pointy - 哈哈,我只是that guy
  • @Sacha 这仅返回最后一条语句。其他两个不工作
  • 可能是因为你从不设置arguments[0]arguments[1]
【解决方案3】:

if(arguments[0]==arguments[0]) 将永远是真实的无论arguments[0] 是什么。

要检查arguments[0] 是否有字符串,您可以使用typeoflength

if(typeof arguments[0] === "string" && arguments[0]+"".length){
    //runs this, if arguments[0] is a string with data in it.
}

这将检查它是否是一个字符串它是否有任何东西。

要检查arguments[1] 是否为假,您可以使用if(!arguments[1]),但如果arguments[1]undefined 字符串,则仍将运行为真。 我建议使用更具可读性和安全性的方式。

if(arguments[1]===false){
    //runs this, if arguments[1] is false
}

【讨论】:

    猜你喜欢
    • 2017-12-22
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 2012-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多