JavaScript中字符串的可能字符长度是否有上限,特别是ES6 +?
你能这样做吗?
const wowThisIsALongString = `${collectedWorksOfWilliamShakespeare}`
[我会手工写出收集的作品,但感觉很懒散。]
如果我理解正确(并且可能性不大),JavaScript字符串只是一种特殊的JavaScript Object,那么技术上没有限制吗?
但也许在实践中情况有所不同?
编辑/更新: 正如人们所说,字符串基元不是对象。在我检查ECMAScript 2015规范之前,我从未想过它。
4.3.17字符串值
原始值,它是零或更多的有限有序序列 16位无符号整数
注意String值是String类型的成员。每个整数值 在序列中通常表示单个16位UTF-16单位 文本。但是,ECMAScript没有任何限制或 对值的要求除了它们必须是16位无符号 整数。
4.3.18字符串类型
所有可能的字符串值的集合
4.3.19字符串对象
Object类型的成员,它是标准内置的实例 字符串构造函数
注意使用String中的String构造函数创建String对象 new表达式,提供String值作为参数。所结果的 object有一个内部插槽,其值为String值。一个字符串 可以通过调用String将对象强制转换为String值 构造函数作为函数(21.1.1.1)。
那么,当他们写这篇文章时,String对象是包含字符串的对象,还是......其他东西的含义?
另一个更新: 我认为Ryan已经在下面回答了这个问题。
答案 0 :(得分:2)
在Section 6.1.4中指定长度为2 53 - 1:
String类型是零个或多个16位无符号整数值(“元素”)的所有有序序列的集合,最大长度为2 53 -1个元素。
这是具有明确表示形式的最高整数:
> 2**53 === 2**53 - 1
false
> 2**53 === 2**53 + 1
true
单个引擎可以有更小的限制。例如,V8将其字符串限制为2 28 - 14个字符。
旁注:原始字符串不是对象,但这与长度限制没有多大关系。 JavaScript有一个“原始包装”错误,允许字符串,数字和布尔值被对象包裹,这就是你链接的部分引用的内容,但是没有理由使用它。