Javascript location.href属性vs.location.assign()方法

Javascript location.href属性vs.location.assign()方法,javascript,Javascript,与使用location.assign(url)相比,使用location.href=url在JavaScript内存消耗方面是否有任何特殊的优势/劣势 我想我想知道,与设置属性相比,访问该方法是否需要更多内存。我一直使用,但从未遇到过以下问题: location.href = url; 调用函数应该比访问属性稍微慢一点,但就内存而言,我个人的看法应该没有太大区别。我个人更喜欢调用函数,因为调用一个函数会给我一个更好的印象,即某些东西正在运行,而不仅仅是一个变量的值在变化 但可能是的,这可能是真

与使用
location.assign(url)
相比,使用
location.href=url
在JavaScript内存消耗方面是否有任何特殊的优势/劣势


我想我想知道,与设置属性相比,访问该方法是否需要更多内存。

我一直使用,但从未遇到过以下问题:

location.href = url;

调用函数应该比访问属性稍微慢一点,但就内存而言,我个人的看法应该没有太大区别。

我个人更喜欢调用函数,因为调用一个函数会给我一个更好的印象,即某些东西正在运行,而不仅仅是一个变量的值在变化


但可能是的,这可能是真的
location.href=url
比location.assign(url)快,尽管这可能取决于JavaScript引擎的实现,请参阅。

针对Windows Server 2008 R2/7 64位上的Chrome 40.0.2214.93 32位测试了我的机器/浏览器

location.assign比location.href慢15%

使用location.href=url与使用location.assign(url)相比,JavaScript内存消耗是否有任何特殊的优势/劣势

不 完全没有差别

原因很简单。每次浏览器加载一个新页面时,它都会启动一个新的Javascript“VM”,并在该VM中运行该页面的脚本。运行问题中的任一语句时,您指示浏览器加载一个新页面,这意味着销毁当前VM(并释放与之相关的任何内存),然后为新页面加载一个全新的VM

除了任何奇怪的浏览器错误,网络效果总是一样的。您的脚本在一个全新的虚拟机中运行,内存消耗完全相同


如果您在浏览器中使用location对象,并且希望能够在Node JS上运行此代码(例如用于测试或等距代码),则可以使用位置的通用/等距实现
ulocation
。完整披露:我是该软件包的作者。

我知道这很旧,但我在寻找检查单元测试是否重定向到正确url的方法时偶然发现了这一点

如果您更关心测试,我会选择
window.location.assign()
。使用函数可以模拟所述函数并检查url输入参数

所以,用笑话:

window.location.assign = jest.fn();

myUrlUpdateFunction();

expect(window.location.assign).toBeCalledWith('http://my.url');

// Clean up :)
window.location.assign.mockRestore();

我想补充一点,我在React工作时体验到了使用这两种方法的不同之处,上面的答案缺失了

在React中分析以下代码段:

return (<>location.href = "www://example.com"</>)
return(location.href=”www://example.com")
Vs

return(location.assign(“www://example.com)

在fonmer的例子中,你会看到字符串www://example.com 在DOM上键入一秒钟,因为它会在重定向发生之前呈现文本


为了避免这种情况,我们需要使用后一个
位置。assign()

答案可能就是您的答案after@JuanMendes当前位置:我继承了一个内部网应用程序,该应用程序构建在一个类似于纸张的漏洞上(速度约为每小时50mb)。我试图在任何地方保存内存。我想问题不是关于使用多少内存,而是是否存在与使用<代码>位置相关的漏洞。分配< <代码> >代码>位置。HRFF=‘< /代码>未来读者:我强烈认为:1。code>location.hrefvs
location.assign()
不会影响性能,除非你的应用程序每秒更改位置数百次;二,。如果你的应用程序正在这样做,那才是你需要解决的真正问题。除非你做这件事的次数太多了(什么用例可能需要这样做??),否则你就是在关注性能,而你绝对不应该这样做。对我来说很有用。我没想到我会省很多钱,但我不知道我是否忽略了什么。谢谢,错了!即使可能存在差异,但若“href”是一个属性,则document.location不是(下面有一个get/set)。其次,我们只讨论µS,可能更少。第三,根据上下文,使用
assign()
似乎比分配
href
(至少使用jsdom)更容易测试,最后,调用
assign()
似乎稍微慢一点。@Jerome同意使用
locaiton.assign()
更好,因为它是可测试的。分配
location.href
从未感觉正确。是的,您在web应用程序中经常执行的操作是每秒500次导航到新位置。。。这就是你应该考虑性能的原因。那么
location.assign(“#foo”)
呢?是的,你是对的,理论上这可能是一个例外。但是,不管您调用location.assign还是assign to the property,最有可能的情况是,在曲面下实际使用的代码都是相同的。属性设置程序很可能只是调用assign。这就是我建造它的方式。:)请记住,此处的
mockRestore()
调用不会还原原始本机函数。要以正确的方式执行此操作,您需要使用
jest.spyOn()
函数-刚刚检查了您的测试,似乎location.href在Chrome中的速度要快1.5倍。