当前位置: 首页 > 知识库问答 >
问题:

为什么我不能使用JavaScript在if语句中重新分配这个变量?[副本]

孟高峰
2023-03-14

我正在经历一些奇怪的行为,我认为与范围有关,但我不能解释为什么会发生。

function toCamelCase(str){
    let isDash = false
    for (let char in str) {
      if (char === "-") {
        isDash = true
      }
    }
    if (isDash) {
      return str.split("-").map(word => word[0].toUpperCase() + word.slice(1, word.length + 1)).join("")
    } else {
      return str.split("_").map(word => word[0].toUpperCase() + word.slice(1, word.length + 1)).join("")
    }
  }

let result = "why-false"
console.log(toCamelCase(result))
let isDash = () => {
for (let char in str) {
  if (char === "-") {
    return true
  }

但我不明白为什么前面的例子不起作用。我已经读过关于范围的文章,如果在更高的级别上定义了这个变量,应该可以重新分配给它。即使我在函数外定义了isDash,它仍然不起作用。它的值总是保持初始值:false。为什么if语句不将其值更改为true?

let x = [1, 4, 5, 7]
let txt = 0
let working = "no"

for (let i in x) {
  txt += x[i]
  if (txt > 4) {
    working = "yes"
  }
}

console.log(working)

正如您所看到的,如果我编写类似的东西来演示是否可以在嵌套的if语句中使用变量,它可以正常工作,并且工作将记录YES。我在这里漏掉了什么?我真的很感激一些帮助,这对我来说真的是一个死胡同,如果我自己能想出来,我就不会寻求帮助了。非常感谢任何能向我解释这件事的人!

共有1个答案

翟嘉年
2023-03-14

这里的问题是您的for循环:

    for (let char in str) {
      if (char === "-") {
        isDash = true
      }
    }

for-in循环在索引或键上循环,而不是在值上循环(您可以通过在循环中执行console.log(char);来测试这一点)。相反,使用for-of循环。

 类似资料:
  • 这个程序要求我写一个程序,要求用户键入两个数字x,y,和一个算术符号s。根据输入的符号,程序将两个数字相加或相减,并使用带有三个参数的返回类型方法返回结果。 示例:如果输入是2、3和'+'。然后,程序将打印:5 这就是我所做的; 但我无法在不知道为什么的if命令中获取(char1)

  • 问题内容: 以下Java代码无法编译。 为什么?在没有先声明的情况下,没有代码路径可导致程序将1分配给该路径。 我想到的范围可能仅限于第一条陈述,但后来我不明白为什么。如果我真的不想不必要地声明以提高性能怎么办?我不喜欢声明后不使用变量。 (您可能想争论一下,我不可以在第二条语句中简单地声明b ,在这种情况下,请想象一下它可能在其他地方处于循环中。) 问题答案: 为什么?如果没有先声明,没有代码路

  • 在下面的代码中,一旦执行,它将根据随机数生成器更改对象的状态。我还有一个函数,它在运行时工作得非常好。 我要做的是:当对象的状态发生更改,但以前的状态等于更改后的状态时,我希望程序调用。 但是,只要在运行时上一个状态和当前状态彼此相等,语句就不会返回true,我看不出为什么不返回?谁能告诉我为什么和如何解决这个问题吗? 我应该提到的是,我正在使用命令模式来设计程序的这一部分。

  • 问题内容: 我想知道是否可以像这样在条件运算符中为变量赋值: 用Java有什么办法做到这一点?因为我知道在某些情况下这是可能的,但是我不确定在if语句中是否做错了或者是否不可能。 问题答案: 可以分配变量,但不能在条件语句中声明变量:

  • 我目前正在修复别人的Java代码中的一个bug,但我无法解释这个bug。所讨论的代码是下面的if语句: 其中初始化为和函数如下所示: 令我困惑的是,即使被设置为false,代码仍然调用并执行函数。我一直认为这是不应该发生的短路。if语句本身总体上仍然被计算为false,因为只有第一个代码段中的else-block中的代码被执行。 那么,这个if语句为什么会有这样的行为呢?是短路失败,还是我误解了原

  • 我可以打印最大罚款,但我不能打印计数。我看不出max和count之间的区别,也看不出为什么它不让我打印count。感谢任何帮助