Scala 子字符串正确抛出 IndexOutOfBounds 但不在 Scala.js 中

Scala substring correctly throws IndexOutOfBounds but does not in Scala.js

在 Scala REPL 中,当在太短的字符串上调用子字符串而无法剪切时,它会按预期抛出索引越界:

scala> "123".substring(0,6)
java.lang.StringIndexOutOfBoundsException: String index out of range: 6
  at java.lang.String.substring(String.java:1963)
  ... 32 elided

但是运行上面的Scala.js没有抛出异常:

"123".substring(0,6)

// returns "123"

为什么会这样?

这是维护者对 an almost identical question 的回答:

That said, no, we won't make consistent, because StringIndexOutOfBounds is undefined behavior in Scala.js.

您可以检查 the documentation of the semantics of Scala.js 来确认这个说法,但是 substring 这个具体案例之前让我感到困惑,应该在该页面上更具体地指出。