A.1 Annex B(ECMAScript)
JavaScript 语言的官方名称是 ECMAScript(指的是管理它的 ECMA 标准),这一点不太为人所知。那么 JavaScript 又是指什么呢? JavaScript 是该语言的通用称谓,更确切地说,它是该规范在浏览器上的实现。
官方 ECMAScript 规范包括 Annex B,其中介绍了由于浏览器兼容性问题导致的与官方规范的差异。
可以这样来理解:这些差异只存在于浏览器中。如果代码只在浏览器中运行,就不会发现任何差异。否则(如果代码也在 Node.js、Rhino 等环境中运行),或者你也不确定的时候,就需要小心对待。
下面是主要的兼容性差异。
· 在非严格模式中允许八进制数值常量存在,如 0123 (即十进制的 83 )。
· window.escape(..) 和 window.unescape(..) 让你能够转义(escape)和回转(unescape)带有 % 分隔符的十六进制字符串。例如,window.escape( "? foo=97%&bar=3%" ) 的结果为 "%3Ffoo%3D97%25%26bar%3D3%25" 。
· String.prototype.substr 和 String.prototype.substring 十分相似,除了前者的第二个参数是结束位置索引(非自包含),后者的第二个参数是长度(需要包含的字符数)。
Web ECMAScript
Web ECMAScript 规范(https://javascript.spec.whatwg.org )中介绍了官方 ECMAScript 规范和目前基于浏览器的 JavaScript 实现之间的差异。
换句话说,其中的内容对浏览器来说是“必需的”(考虑到兼容性),但是并未包含在官方规范的“Annex B”部分(到本书写作时)。
· <!-- 和 --> 是合法的单行注释分隔符。
· String.prototype 中返回 HTML 格式字符串的附加方 法:anchor(..) 、big(..) 、blink(..) 、bold(..) 、fixed(..) 、fontcolor(..) 、fontsize(..) 、italics(..) 、link(..) 、small(..) 、strike(..) 和 sub(..) 。
以上内容在实际开发中很少使用,也不推荐,我们更倾向于使用其他的内建 DOM API 和自定义工具集。
· RegExp 扩展:RegExp.$1 .. RegExp.$9 (匹配组)和 RegExp.lastMatch/RegExp["$&"] (最近匹配)。
· Function.prototype 附加方法:Function.prototype.arguments (别名为 arguments 对象)和 Function.caller (别名为 arguments.caller )。
arguments 和 arguments.caller 均已被废止,所以尽量不使用它们,也不要使用它们的别名。
一些十分细微且很不常见的差异这里就不介绍了。如有需要,可参考文档“Annex B”和“Web ECMAScript”。
通常来说,出现这些差异的情况很少,所以无需特别担心。只要在使用它们的时候特别注意即可。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论