为什么JavaScript中包含与语言无关的全局对象?

为什么JavaScript中包含与语言无关的全局对象?,javascript,Javascript,我正在阅读Flanagan的权威JavaScript,他列出了该语言定义的所有JavaScript全局对象 然而,其中5个(约20个)似乎与语言无关: decodeURI encodeURI decodeURIComponent encodeURIComponent JSON 当URI和JSON更像是一种浏览器服务器时,为什么这些被认为是语言的一部分 参考 微软在IE5.5中引入了encodeXXX和decodeXXX方法(紧随其后的是Netscape 6),并在ECMA-262规范的1999

我正在阅读Flanagan的权威JavaScript,他列出了该语言定义的所有JavaScript全局对象

然而,其中5个(约20个)似乎与语言无关:

decodeURI
encodeURI
decodeURIComponent
encodeURIComponent
JSON
当URI和JSON更像是一种浏览器服务器时,为什么这些被认为是语言的一部分

参考


微软在IE5.5中引入了
encodeXXX
decodeXXX
方法(紧随其后的是Netscape 6),并在ECMA-262规范的1999年3月修订版中引入。 JSON是后来引入的,现在所有主要浏览器都支持JSON,并包含在ECMA-262规范的5/2011版本中


这些方法不是原始语言的一部分,也许它们不应该在全局名称空间中。与AJAX类似,这些方法是由特定的供应商引入的,后来被其他供应商采用,没有严格的正式流程。这只是JavaScript美丽丑陋的另一个方面

它们不是真正的浏览器相关,而是协议相关。URI不会因浏览器的不同而改变,它是http请求的必要组件。当然,解码可以被认为是服务器端的。关键是,大多数全局语言都与语言相关——对象、函数、字符串、数字、数学等等……Javascript从一开始就被设计成一种浏览器脚本语言,而且设计得很匆忙。如果预见到它会成为浏览器内外的一种如此重要的语言,那么其中有很多东西可能会以不同的方式实现。我不会坚持这样的细节。Javascript有一些东西本来不应该以这种方式设计。