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

这两条线是否有区别?

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

第一个添加一个项目到你的历史,你可以(或应该能够)点击“返回”,返回到当前页面。

第二个replace当前的历史项目,所以你不能回到它。

请参阅window.location

assign(url) :在提供的URL中加载文档。

replace(url) :用提供的URLreplace当前文档。 与assign()方法的不同之处在于,在使用replace() ,当前页面将不会保存在会话历史logging中,这意味着用户将无法使用“后退”button导航到该页面。

哦,一般来说:

 window.location.href = url; 

比以往更受青睐:

 window.location = url; 

TLDR;

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

但是,如果你读了这个,你将获得不可否认的证据。

事实是,使用这个很好,但为什么要做这个问题。 你应该走上更高的道路,只是做它可能应该完成的方式。

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

这个代码是完全正确的语法,明智的逻辑,types明智的,你知道唯一的错误呢?

它有location而不是location.href

那这个呢

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

mystring的价值是什么? 没有人真的知道没有做一些testing。 没有人知道这里会发生什么。 我只是写了这个,我甚至不知道它做了什么。 location是一个对象,但我分配一个string将传递string或传递位置对象。 可以说,这应该如何实施有一些答案。 你能保证所有的浏览器会做同样的事情吗?

这几乎可以猜测所有的浏览器将处理相同的。

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

那么如果你把它放在打字稿中,它会中断,因为types编译器会认为这是一个对象?

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

如果你采取这个捷径,那么今天可能会好起来,你明天可能会好起来,地狱可能会永远好,但你先生现在是一个糟糕的程序员。 这对你不好,它会让你失望。

会有更多的对象。 将会有新的语法。

你可能会定义一个只需要一个string但返回一个对象的getter,最糟糕的是你会认为你做的是正确的事情,你可能认为你是聪明的方法,因为这里的人会把你引入歧途。

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

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

大部分编程爱好者都喜欢编程,并且喜欢变得更好。 在过去的几年中,我学到了很多,学到了很多东西。 我现在知道的最重要的事情,特别是当你写图书馆时,是一致性和可预测性的。

做你可以一贯做的事情。

+"2" < – 这里在这里parsingstring到一个数字。 你应该使用它吗? 或者你应该使用parseInt("2")

那么var num =+"2"呢?

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

如果你开始遵循这两个字一致和可预测。 你会知道正确的答案在stackoverflow吨的问题。

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

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

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

这段代码失败了,并花了很长时间才弄清楚。 由于某种原因,它看到的是

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

它隐藏在源代码深处,它告诉我“你好世界”不是一个函数。

为了更有趣的节点不显示传输代码的源地图。

浪费了这么多愚蠢的时间。 我正在向某个人介绍ES6是如何辉煌的,然后我不得不开始debugging,并展示如何头痛和更好的ES6。 没有说服力。

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

当人们说这两个问题无关紧要的时候,问题就会起作用 有机会更聪明更有经验的人会告诉你其他明智的。

如果有人覆盖了位置对象,该怎么办? 他们会为旧版浏览器做一个垫脚。 它会得到一些新function,需要被刷新,你的3年的代码将失败。

我最后要说的话

编写干净,明确的有目的的代码会为你的代码做一些无法正确或错误回答的问题。 它所做的是使你的代码成为一个启动器。

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

作为logging。 使用

window.location.href