繁体   English   中英

为什么string在JavaScript中是一个primitive?

[英]Why string is a primitive in JavaScript?

据我所知,对象可以是任何大小,所以你永远不知道 object 有多大。 所以它被实现为引用类型。 与您事先知道大小的任何原始类型不同。这就是本文所说的。 但是字符串......来自另一篇文章:

字符串:一组 16 位无符号 integer 值的“元素”。 因为字符串不是固定值,所以分配给字符串的变量不包含字符串,而是对它的引用。

但是原始类型的字符串如何呢?

你正在读的那本书很奇怪。

原始类型的大小固定为 memory。例如,一个数字占用 8 个字节 memory,而一个 boolean 的值只能用一位来表示。 数字类型是最大的原始类型。 如果每个JavaScript变量保留8个字节的memory,则该变量可以直接保存任何原始值。

然而,引用类型是另一回事。 例如,对象可以是任意长度——它们没有固定的大小。 arrays 也是如此:一个数组可以有任意数量的元素。 同样,function 可以包含任意数量的 JavaScript 代码。 由于这些类型没有固定大小,因此它们的值不能直接存储在与每个变量关联的 memory 的八个字节中。 相反,变量存储对值的引用。 通常,此引用是某种形式的指针或 memory 地址。 它不是数据值本身,而是告诉变量去哪里寻找值。

然后作者继续解释这是如何导致不同行为的,就好像这是 memory 布局的效果一样。 但他们的理解方式是错误的。 区别应该是:

  • 基本类型具有简单的、不可变的值,在传递时将按值复制。
  • 引用类型 - 与“object 类型”同义 - 具有可变对象作为值,具有标识(在实例化 object 时创建)并且可以具有任意可变属性。 一个变量从不持有“一个对象”本身,而是一个对它的引用,当你传递它时,这个引用就会被复制。

那(和“数组和函数是对象”)是 JavaScript 值 model 的要点。这是如何实现的并不重要——事实上它因引擎而异。

现在当你问“为什么字符串是原始值? ”时,答案是“因为字符串是不可变的值并且没有属性”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM