假设我使用URL interface创建了一个新URL。例如。像这样:
new URL('https://www.example.com/démonstration.html?query=6#bla')
现在我需要将此作为纯字符串。 如何最好地进行转换?
注意:此处的示例为最小示例。我显然不会将(硬编码)字符串转换为URL对象并转换回字符串。为了提供一些背景信息,假设我修改了两者之间的URL对象(可能是通过用户输入),并且/或者将其传递给其他函数。最后,我有一个URL对象,并希望将其作为纯字符串。
我发现了以下几种方法:
通过href
属性:
(new URL('https://www.example.com/démonstration.html?query=6#bla')).href
// "https://www.example.com/d%C3%A9monstration.html?query=6#bla"
通过toString
方法:
(new URL('https://www.example.com/démonstration.html?query=6#bla')).toString()
// "https://www.example.com/d%C3%A9monstration.html?query=6#bla"
如您所见,在我的示例中,它返回的结果完全相同。
因此,at the doc会显示:
href
是“包含整个URL的USVString。” toString
返回“包含整个URL的USVString。它是URL.href的同义词,尽管不能用于修改值。” 好的,我不想修改它。 但是真的没有区别吗?也许是关于性能,浏览器支持¹甚至是代码样式? 我必须决定一个,那么我应该选择哪个?
¹实际上是I can see there are differences in the compatibility table for these conversion ways。因此,我想也有一些遗留的实现会以不同的方式处理事情。我不敢相信这些是真正的“同义词”,并且浏览器支持中的这一缺陷似乎也支持这一信念。
答案 0 :(得分:3)
根据specification,他们的行为完全相同。 href
属性被标记为stringifier
,这意味着in JavaScript类获得的toString
方法的行为与该属性完全相同。
您已经注意到,浏览器对他们的支持并不相同。还有一个比另一个更能打字和传输。这完全取决于偏好。但是,我个人认为,显式toString
调用最能传达以下信息:“ 我有一个URL对象,并希望将其作为纯字符串。”