本节书摘来自异步社区《JavaScript启示录》一书中的第1章,第1.9节,作者:【美】Cody Lindley著,更多章节内容可以访问云栖社区“异步社区”公众号查看
1.9 如何存储和复制原始值
原始值在“面值(face value)”中的存储和操作,理解这一点相当重要。这可能听起来很简单,但是这意味着如果将字符串值“foo”存储在myString变量中,那么从字面上讲,“foo”值同样存储于内存中。为什么了解这个知识很重要?因为一旦开始操作(即复制)值,我们就必须了解它,因为原始值是真实值复制。
在下面的示例中,我们在变量myStringCopy中存储了myString值('foo')的一个副本,其值是真实值复制。即使我们改变原来的值,变量myStringCopy引用的复制值仍保持不变。
<!DOCTYPE html><html lang="en"><body><script>
var myString = 'foo' //创建原始值字符对象
var myStringCopy = myString; //复制字符并存储到新变量上
var myString = null; //操作存储在myString变量中的值
/* 原来的值从myString复制到了myStringCopy上,更新myString以后,再检测myStringCopy的值即可证实这点*/
console.log(myString, myStringCopy); // 输出 'null foo'
</script></body></html>
这里的重点是,原始值是作为不可细化的值进行存储和操作的。引用它们会转移其值。在上面的示例中,我们复制或者克隆了myString值并存储到myStringCopy变量中。当更新myString值时,myStringCopy值仍是旧myString值的副本。请记住这点,并对这里的技术细节和复杂对象进行比较(将在下面讨论)。