这两条线有区别吗?
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"
的value是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 和 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