【问题标题】:Is there a maximum length for an ES6 multi-line string?ES6 多行字符串是否有最大长度?
【发布时间】:2017-10-12 20:17:22
【问题描述】:

JavaScript 中字符串的可能字符长度是否有上限,尤其是 ES6+?

你能做到吗?

const wowThisIsALongString = `${collectedWorksOfWilliamShakespeare}`

[我会手写收集的作品,但我觉得很懒。]

如果我理解正确(很可能我没有理解),JavaScript 字符串只是一种特殊的 JavaScript Object,所以技术上没有限制?

但实际情况可能有所不同?

编辑/更新: 正如人们所指出的,字符串原语不是对象。在我检查了 ECMAScript 2015 规范之前,我从来没有这样想过。

4.3.17 字符串值

原始值是零个或多个的有限有序序列 16位无符号整数

注意 String 值是 String 类型的成员。每个整数值 序列中通常表示一个 UTF-16 的 16 位单元 文本。但是,ECMAScript 没有设置任何限制或 对值的要求,除了它们必须是 16 位无符号 整数。

4.3.18 字符串类型

所有可能的字符串值的集合

4.3.19 字符串对象

作为标准内置实例的 Object 类型的成员 字符串构造函数

注意 String 对象是通过使用 String 构造函数创建的 新表达式,提供一个字符串值作为参数。所结果的 对象有一个内部槽,其值为字符串值。一个字符串 可以通过调用 String 将对象强制为 String 值 构造函数作为函数 (21.1.1.1)。

那么,当他们这么写的时候,String 对象是包含字符串的对象,还是……其他的东西?

另一个更新:我认为 Ryan 在下面回答了这个问题。

【问题讨论】:

  • 字符串是 JavaScript 中的原始类型,它不是对象。 String 在后台使用,但字符串文字不是对象。
  • 这取决于实现。 See
  • 为什么重新打开。副本有效。
  • 不要重新打开,而是添加其他重复的问题,例如:stackoverflow.com/questions/34957890/…。很明显,这个问题之前已经以不同的方式被问过好几次了。
  • 关于 Stringstring :string 只是一个 char[],但是为了能够调用字符串上的方法,它们是 被 String 对象包裹: "hi".toString() ...

标签: javascript string


【解决方案1】:

Section 6.1.4中有一个指定长度253 − 1:

String 类型是由零个或多个 16 位无符号整数值(“元素”)组成的所有有序序列的集合,最大长度为 253-1 个元素。

这是用 JavaScript 数字明确表示的最高整数:

> 2**53 === 2**53 - 1
false

> 2**53 === 2**53 + 1
true

单个引擎可以有更小的限制。例如,V8 将其字符串限制为 228 - 14 个字符。

旁注:原始字符串不是对象,但这与长度限制没有太大关系。 JavaScript 有一个“原始包装器”错误功能,允许字符串、数字和布尔值被对象包装,这就是您链接的部分所指的内容,但没有理由使用它。

【讨论】:

  • 所以基本上是因为 String.length 不应该溢出?
  • @Jonasw:对。 (以及任何其他需要与字符串中的索引一起使用的东西。)
  • 这并不重要,因为您没有足够的内存来存储这样的字符串。 2^53 个 16 位值是 18.01 PB
猜你喜欢
  • 1970-01-01
  • 2010-12-16
  • 2011-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-13
  • 1970-01-01
相关资源
最近更新 更多