【问题标题】:Calling toUppercase() on a string variable对字符串变量调用 toUppercase()
【发布时间】:2014-11-06 04:50:07
【问题描述】:

我是一个初学者,刚刚成功地对我的代码进行了故障排除。我很高兴我找到了它,但是我花了很长时间。我希望了解它发生的原因。

这是错误的原始代码。假设变量[nextAlpha] 已经被分配了一个字符串值:

nextAlpha.toUpperCase();

通过一些创造性的测试,我能够确定是线路引起了问题。我想也许它实际上并没有更新变量[nextAlpha] 的值。我尝试了这个,它成功了:

nextAlpha = nextAlpha.toUpperCase();

我已将其余代码省略,但假设 [var = nextAlpha] 已在我的脚本顶部声明,我认为这意味着“全局”。有了这些信息,我认为只需调用变量上的方法就足够了。为什么不将字符串“更新”为大写,就像我执行额外步骤(重新)将其分配给原始 [nextAlpha] 字符串时所做的那样?

【问题讨论】:

  • 当你使用 nextAlpha.toUpperCase();它会生成一个字符串,因此您需要将此值分配给您要分配回 nextAlpha 的某个引用。这不是错误。
  • 字符串是不可变的。

标签: javascript methods


【解决方案1】:

toUpperCase 将转换后的字符串作为新对象返回 - 它不对nextAlpha 执行转换。

来自 Mozilla 参考资料:

toUpperCase 方法返回转换为大写的字符串的值。 toUpperCase 不影响字符串本身的值。

reference

【讨论】:

  • 谢谢。为了澄清起见,如果我在代码前面声明 [var = nextAlpha],然后在稍后声明 [nextAlpha = nextAlpha.toUpperCase()],我在这里做什么?我是否正在创建一个具有相同名称的新字符串?我是在“重新分配”它吗?因为我现在明白字符串是不可变的,但是在我的代码中我只是更新了字符串的值。感谢您提供任何提示。
  • 是的,您正在为nextAlpha 分配一个新值(大写字符串)。
【解决方案2】:

在 JavaScript 中,字符串是不可变的:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures

与 C 等语言不同,JavaScript 字符串是不可变的。这意味着一旦创建了字符串,就无法修改它。但是,仍然可以基于对原始字符串的操作创建另一个字符串

【讨论】:

    【解决方案3】:

    toUpperCase() 是一个函数(所以返回一个值)而不是一个属性(影响变量本身)

    【讨论】:

      猜你喜欢
      • 2013-07-19
      • 1970-01-01
      • 2012-01-29
      • 2020-06-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-17
      • 1970-01-01
      • 2014-09-06
      相关资源
      最近更新 更多