string 和串连接实现机制的一些要点
主要参考文档还是 ECMAScript 语言规范,不过在此不引用相关内容了,太麻烦。仅列出几个要点,读者请自行考察验证。
- 字面量 string 不以对象实现,作为 16 位无符号整数存储,当局称这么做的目的是为了“简单高效”。
- “+”运算符的所谓“重载”,其实只是同一个算法内部的不同分支。
- “+”运算符进入“串连接”操作的分支后,调用左运算元(转换成 String 对象后)的 Concatenate 方法,这意味着返回的是对象(运算元均为数字时,将调用另外的方法,不返回对象)。
- “+”运算符的算法实现是比较复杂的,要多次调用内部的类型转换方法与串连接操作,所以效率低。
- JS 中 string 的实现与“+”操作的机制与 Java 是很不一样的,虽然我不知在哪本书上看见作者声称它们与 Java 中的实现没什么不同,纯属误人子弟。