window.location =和window.location.replace()有什么区别?

时间:2009-12-08 09:40:37

标签: javascript window location

这两行之间有区别吗?

var url = "http://www.google.com/";
window.location = url;
window.location.replace(url);

2 个答案:

答案 0 :(得分:362)

window.location在您的历史记录中添加了一个项目,您可以(或应该能够)点击“返回”并返回当前页面。

window.location.replace替换当前的历史记录项,因此您无法再回到它。

请参阅window.location

  

assign(url):将文档加载到   提供的网址。

     

replace(url):替换当前   文件与提供的文件   URL。与...的区别   assign()方法是使用后的方法   replace()当前页面不会   保存在会话历史中,意思是   用户将无法使用Back   按钮导航到它。

哦,一般来说:

window.location.href = url;

受到青睐:

window.location = url;

答案 1 :(得分:11)

TLDR;

使用location.href或更好地使用window.location.href;

但是,如果您阅读本文,您将获得无可否认的证明。

事实是,使用它是好的,但为什么做有问题的事情。你应该采取更高的道路,并按照可能的方式去做。

location = "#/mypath/otherside"
var sections = location.split('/')

这段代码在语法方面完全正确,逻辑明智,类型方面 你知道它唯一的问题吗?

它有location而不是location.href

这个怎么样

var mystring = location = "#/some/spa/route"

mystring的价值是多少?没有做一些测试,有没有人真的知道。没人知道这到底会发生什么。我刚刚写了这个,我甚至不知道它做了什么。 location是一个对象,但我分配一个字符串,它将传递字符串或传递位置对象。让我们说如何实现这一点有一些答案。你能保证所有浏览器会做同样的事情吗?

我可以猜测所有浏览器都会处理相同的事情。

var mystring = location.href = "#/some/spa/route"

如果你将它放入打字稿中,它会破坏,因为类型编译器会说这是一个对象吗?

然而,这个对话比location对象更深刻。这个转换是关于你想成为什么样的程序员的?

如果你采取这种捷径,是的,今天可能没问题,明天可能没问题,永远可能没事,但你先生现在是一个糟糕的程序员。这对你来说不合适,它会让你失望。

会有更多的物品。会有新的语法。

你可以定义一个只接受一个字符串但是返回一个对象的getter,最糟糕的部分就是你会认为你正在做一些正确的事情,你可能会觉得你很聪明这个聪明的方法,因为这里的人可耻地让你误入歧途。

var Person.name = {first:"John":last:"Doe"}
console.log(Person.name) // "John Doe"

使用getter和setter这个代码实际上可以工作,但仅仅因为它可以完成并不意味着这样做是“明智的”。

大多数编程爱好的人喜欢编程,喜欢变得更好。在过去的几年里,我已经相当不错并且学到了很多东西。我现在知道的最重要的事情,特别是当您编写库时,一致性和可预测性。

做你可以坚持不懈的事情。

+"2"< - 此处此处将字符串解析为数字。你应该用吗? 或者你应该使用parseInt("2")

var num =+"2"怎么办?

从你学到的东西,到stackoverflow的思想,我不太希望。

如果您开始遵循这两个词的一致性和可预测性。您将了解有关stackoverflow的大量问题的正确答案。

让我告诉你这是如何得到回报的。 通常我会在我编写的每一行javascript上放置;。我知道它更有表现力。我知道它更清楚了。我遵守了我的规则。有一天我决定不这样做。为什么?因为有这么多人告诉我它不再需要它了,JavaScript可以没有它。所以我决定这样做。现在因为我已经确定自己是一名程序员(因为你应该享受掌握一门语言的成果)我写了一些非常简单的东西而且我没有检查它。我删除了一个逗号,我认为我不需要重新测试删除一个逗号这样简单的事情。

我在es6和babel中写了类似的东西

var a = "hello world"
(async function(){
  //do work
})()

此代码失败并永远弄明白。 它出于某种原因看到的是

var a = "hello world"(async function(){})()

隐藏在源代码的深处,它告诉我“hello world”不是一个函数。

为了更有趣,节点不会显示已编译代码的源地图。

浪费了那么多愚蠢的时间。我还向某人介绍了ES6如何才华横溢,然后我不得不开始调试并展示无头痛和更好的ES6。没有说服力。

我希望这能回答你的问题。这是一个古老的问题,对于下一代人来说更是如此,那些仍在学习的人。

当人们说无论哪种方式无关紧要的问题。机会更聪明,更有经验的人会告诉你其他明智的。

如果有人覆盖了位置对象,该怎么办?他们会为旧浏览器做垫片。它将获得一些需要填充的新功能,并且您的3岁代码将失败。

我在思考的最后一点。

编写干净,清晰,有目的的代码可以为您的代码做一些无法正确或错误回答的代码。它的作用是让你的代码成为推动者。

您可以使用更多插件,图书馆而不用担心代码之间的中断。

记录。使用

window.location.href