将URL接口转换为字符串时,href和toString有什么区别?

时间:2019-01-26 16:49:56

标签: javascript url

假设我使用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。因此,我想也有一些遗留的实现会以不同的方式处理事情。我不敢相信这些是真正的“同义词”,并且浏览器支持中的这一缺陷似乎也支持这一信念。

1 个答案:

答案 0 :(得分:3)

根据specification,他们的行为完全相同。 href属性被标记为stringifier,这意味着in JavaScript类获得的toString方法的行为与该属性完全相同。

您已经注意到,浏览器对他们的支持并不相同。还有一个比另一个更能打字和传输。这完全取决于偏好。但是,我个人认为,显式toString调用最能传达以下信息:“ 我有一个URL对象,并希望将其作为纯字符串。

相关问题