我正在阅读David Flanagan的JavaScript: The Definitive Guide。我真的很享受,我很高兴我的第一本Javascript书就是这本书。 :)
但是,我对这一段(3.7不可变原始值和可变对象)没有多大意义 参考文献):
原始值(
undefined
)之间的JavaScript存在根本区别,null
,布尔值,数字和字符串)和对象(包括数组和函数)。 基元是不可变的:没有办法改变(或“改变”)原始值。 对于数字和布尔值来说,这是显而易见的 - 改变数据甚至没有意义 数字的值。然而,字符串并不那么明显。因为字符串是 就像字符数组一样,你可能希望能够改变任何字符 指定的索引。
由于我缺乏CS背景(自学成才和所有......),我可能只是错过了一些东西,但有人可以帮我解释一下吗?
特别是我所强调的部分:为什么更改数字的值没有意义?
到目前为止我的想法:
3 == 4
),但这样的解释在下一句话中失败:这样的操作确实如此
字符串比数字更有意义......?答案 0 :(得分:6)
你是对的,改变字符串文字的值是没有意义的 - 这实际上就是他所说的;他只是说它可能不像3 == 4
那样明显,因为你可以引用字符串中的单个字符(然后可能认为你可以通过更改特定字符来更改字符串)。
考虑一下这个例子:
var s = 'hello world';
s[0] = 'H';
直观地说,这似乎会使单词大写,但字符串是不可变的,因此将无法正常工作。
检查s
的输出,我们仍然看到:s > 'hello world'
答案 1 :(得分:2)
这正是你如何追捕它的。改变3的值是没有意义的,例如3 == 4
。
就字符串而言,在某些语言(如C语言)中可以看到它们的值的可变性,但在Java等其他语言中却看不到。因此,它们不一定非常明显,它们是不可改变的。任何选择都有支持和反对的论据。
答案 2 :(得分:1)
基本上,你比作者更能把握这种区别,或者至少比作者给你的信任。你的“想法到目前为止”是完全正确的,但他认为许多新用户也希望能够改变字符串原语。你没有,这意味着你的期望与语言的实际行为方式相匹配,而不是与他认为你期望事物的方式相符。
答案 3 :(得分:1)
该字符串在JavaScript中是不可变的。他说字符串“不太清楚”,因为它对许多人来说没有多大意义(可能它对你来说很明显)。我能提供的最佳解释是你定义字符串:“Bob”。您可以重命名整个事物“Cob”,但是您无法将“B”物理地更改为“C”,因为内部“B”只是一个数字(字符表示)。所以你基本上做“B”=“C”。或SomeNumber = AnotherNumber。