window.location= 和 window.location.replace() 之间有什么区别?
这两条线之间有区别吗?
var url = "http://www.google.com/";
window.location = url;
window.location.replace(url);
这两条线之间有区别吗?
var url = "http://www.google.com/";
window.location = url;
window.location.replace(url);
window.location
将项目添加到历史记录中,以便您可以(或应该能够)单击“返回”并返回当前页面。
window.location.replace
替换当前历史记录项,因此您无法返回到该项。
请参阅窗口.位置
:
assign(url)
:在提供的 URL 处加载文档。
replace(url)
:将当前文档替换为提供的 URL 中的文档。与该方法的不同之处在于,使用后当前页面不会保存在会话历史记录中,这意味着用户将无法使用“后退”按钮导航到它。assign()
replace()
哦,一般来说:
window.location.href = url;
比以下情况更受青睐:
window.location = url;
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"
如果你把它放到typescript中,它会因为类型编译器说这是一个对象而中断吗?
然而,这种对话比对象要深刻得多。这种转换是关于你想成为什么样的程序员?location
如果你走这条捷径,是的,今天可能没事,明天可能没事,地狱它可能永远没事,但你先生现在是一个糟糕的程序员。这对你来说是不好的,它会让你失望。
将有更多的对象。将有新的语法。
你可能会定义一个只接受一个字符串但返回一个对象的getter,最糟糕的部分是你会认为你正在做正确的事情,你可能会认为你对这种聪明的方法很聪明,因为这里的人可耻地把你带入了歧途。
var Person.name = {first:"John":last:"Doe"}
console.log(Person.name) // "John Doe"
对于 getter 和 setters,这段代码实际上可以工作,但仅仅因为它可以完成并不意味着这样做是“明智的”。
大多数编程的人都喜欢编程,喜欢变得更好。在过去的几年里,我变得相当不错,学到了很多东西。我现在知道的最重要的事情,特别是当你编写库时,是一致性和可预测性。
做你能始终如一地做的事情。
+"2"
< - 这里将字符串解析为一个数字。你应该使用它吗?或者你应该使用?parseInt("2")
怎么样?var num =+"2"
从你所学到的东西,从堆栈溢出的思想中,我不太希望。
如果你开始遵循这两个词,一致且可预测。您将知道有关堆栈溢出的大量问题的正确答案。
让我告诉你这是如何得到回报的。通常我会把我写的每一行javascript都放在上面。我知道它更具表现力。我知道这更清楚。我遵守了我的规则。有一天我决定不这样做。为什么?因为很多人告诉我,它不再需要了,JavaScript可以没有它。所以我决定这样做。现在,因为我已经确信自己是一名程序员(因为你应该享受掌握一门语言的成果),我写了一些非常简单的东西,我没有检查它。我删除了一个逗号,我认为我不需要重新测试像删除一个逗号这样简单的事情。;
我在es6和babel中写了类似的东西
var a = "hello world"
(async function(){
//do work
})()
这段代码失败了,花了很长时间才弄清楚。由于某种原因,它所看到的是
var a = "hello world"(async function(){})()
隐藏在源代码的深处,它告诉我“hello world”不是一个函数。
为了更有趣,节点不显示转译代码的源映射。
浪费了那么多愚蠢的时间。我也向某人介绍了ES6如何出色,然后我不得不开始调试并演示ES6是多么无头痛和更好的ES6。没有说服力。
我希望这回答了你的问题。这是一个古老的问题,它更适合下一代,那些仍在学习的人。
当人们说无论哪种方式都不起作用时,就会提出问题。一个更聪明的、更有经验的人可能会告诉你其他的智慧。
如果有人覆盖了位置对象,该怎么办?他们将为较旧的浏览器做一个填充程序。它将获得一些需要填充的新功能,并且您3年前的代码将失败。
我最后要思考的笔记。
编写干净、清晰、有目的的代码会为您的代码做一些无法正确或错误回答的事情。它的作用是使您的代码成为启用码。
您可以使用更多的东西插件,库,而不必担心代码之间的中断。
以供记录。用
window.location.href