【问题标题】:Why is my break statement only working on the first "if"?为什么我的 break 语句只适用于第一个“if”?
【发布时间】:2021-05-28 19:07:34
【问题描述】:

我正在尝试制作一个基于提示的待办事项列表

目前我正在尝试添加将提示用户添加到数组的部分,这有效,但是当我尝试退出时,它只是不断询问。 退出适用于第一个问题 - “你想做什么?”但是一旦我说“新”然后输入一个项目,它就不会让我退出。

// TO DO 
let toDo = [];

let options = prompt("What would you like to do?")
while (options !== "quit") {
  if (options === "quit") {
    break;
  }
  if (options === "new") {
    let options = prompt("add to do")
    toDo.push(options);
  }
}

console.log( toDo )

【问题讨论】:

  • “我试图通过尽可能少的复制或自己找到答案来做到这一点......” 我不认为这就是你的意思。你不想自己去寻找答案吗?
  • 你认为内部let options有什么范围?
  • 不要重新声明let options?
  • let 的范围在代码块上,您正在创建一个新的 options 变量。 while 中的 options 变量是一个不同的变量,永远不会更新。

标签: javascript


【解决方案1】:

这里的break 完全没有意义。 if (options === "quit") { 永远不会通过,因为到那时 while (options !== "quit") { 将失败。

您的问题是因为您有 两个 名为 options 的变量。

第一个(第 4 行)用于测试循环是否应该退出。

第二个(在if (options === "new") { 内)用于将某些内容推送到toDo 数组和shadows 第一个。

不要重新声明 options。从第二个变量中删除 let,然后为 existing 变量分配一个新值。

【讨论】:

    【解决方案2】:

    请使用这段代码,你做错了什么,

    1. 你再次声明选项
    2. if (options === "new") if bad,当值不是'new'(或'quit')时,它会无限循环
    3. while 测试就足够了

    // TO DO 
    let toDo = []
    
    let options = prompt("What would you like to do?")
    while (options !== "quit")
      {
      toDo.push(options)
      options = prompt("add to do")
      }
    
    console.log( toDo )

    【讨论】:

      【解决方案3】:

      我认为你可以简化你的逻辑,只用一个提示;当用户点击OK时,输入将被添加到待办事项列表中,当他们点击Cancel时,您将停止提示用户输入。

      此外,由于您必须提示用户至少一次,因此使用do { ... } while () 块是有意义的。

      const todoList = [];
      let todoItem;
      
      do {
        todoItem = window.prompt('What do you want to add to your list?\n(click on "OK" to add an item or on "Cancel" to quit)');
        
        if (todoItem !== null && todoItem !== '') todoList.push(todoItem)
      } while (todoItem !== null)
      
      // test
      console.log(todoList);

      【讨论】:

        猜你喜欢
        • 2018-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-12
        相关资源
        最近更新 更多