字符串可以被视为可以保存和操作文本的最简单的对象,因此作用于字符串的函数不一定要作为方法集中在一起。另一方面,javascript主要是一种Web编程语言,使用URI对于语言中的字符串来说是很常见的用法。在这种情况下,像lastName.encodeURIComponent()
这样的东西实际上非常有用。
为什么像encodeURIComponent和unescape这样的函数而不是String对象上的方法?这里有一些CS原则在起作用,还是由该语言的一位设计师主观选择?
显然不是每个对字符串进行操作的函数都需要在字符串对象中,但是人们在哪里以及如何决定在哪里画线?
答案 0 :(得分:7)
因为它们特定于浏览器环境。它们在JavaScript语言的通用String对象中没有位置。
答案 1 :(得分:3)
我认为这些方法不是JavaScript的一部分,而是继承自window
,它是与浏览器相关的全局对象。因此,虽然您列出的函数处理字符串,但它们实际上与浏览器函数紧密相关,因此不会附加到String
原型。像MDN这样的资源在这方面有些模糊,但我很确定最初的JS规范没有提到这些方法。
它可能没什么意义,但是现在实际上可以想象有人可能想要使用JS作为嵌入式系统的语言或其他没有互联网关联的东西。在这里,包含encodeURIComponent()
的语法与document.getElementById()
一样不合适。
答案 2 :(得分:1)
你会在哪里停下来。字符串是无处不在的,根据定义,您使用任何将字符串作为参数或返回的方法都应该在字符串类中。
同样,使用编码方法来获取编码的流和流方法是合理的。
你可以快速到达所有地方,或者通过委派给Encoding类来扩展字符串。
答案 3 :(得分:1)
escape()函数编码一个字符串。
此功能m * 使字符串可移植 *,因此可以通过任何网络传输到任何支持ASCII字符的计算机。
此功能对特殊字符进行编码
现在这个功能特定于Strings,它是基于浏览器的环境中的URL,JS作为一种语言独立于它。
因此,在非网络/ URL相关场景中放置转义,unescape也将变为无用。
这就是为什么他们是Window对象的一部分。
你想要它在字符串中,你可以将它添加到String的原型中。