代码之家  ›  专栏  ›  技术社区  ›  Aaron Digulla

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

  •  227
  • Aaron Digulla  · 技术社区  · 15 年前

    这两条线有区别吗?

    var url = "http://www.google.com/";
    window.location = url;
    window.location.replace(url);
    
    2 回复  |  直到 15 年前
        1
  •  350
  •   Dirty Penguin    7 年前

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

    window.location.replace 替换当前历史记录项,这样您就不能返回到它。

    window.location :

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

    replace(url) :更换电流 与提供的文件 网址。与 assign() 方法是使用后 replace() 当前页不会 保存在会话历史记录中,意思是 用户将无法使用背面 按钮导航到它。

    哦,一般来说:

    window.location.href = url;
    

    优于:

    window.location = url;
    
        2
  •  10
  •   Lpc_dark    9 年前

    TLDR;

    使用 location.href 或者更好的使用 window.location.href ;

    然而,如果你读到这篇文章,你会得到不可否认的证据。

    事实上,使用是可以的,但为什么要做有问题的事情。你应该走上更高的路,按照可能的方式去做。

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

    此代码在语法、逻辑和类型方面完全正确 你知道唯一的问题吗?

    它有 location 而不是 地点

    这个怎么样?

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

    价值是什么 mystring ?有人不做测试就知道吗?没人知道这里会发生什么。见鬼,我刚刚写了这个,我甚至不知道它做了什么。 位置 是一个对象,但我正在分配一个字符串,它将传递字符串还是传递位置对象。假设有一些关于如何实现这一点的答案。你能保证所有的浏览器都会做同样的事情吗?

    我几乎可以猜到所有浏览器都会处理相同的问题。

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

    如果你把它放到typescript中,它会断开吗,因为类型编译器会说这应该是一个对象?

    这段对话比 位置 但是,反对。这个转换是关于你想成为什么样的程序员的?

    如果你走这条捷径,是的,今天可能没事,明天可能没事,地狱可能永远没事,但是你先生现在是个糟糕的程序员。这对你不好,也会让你失望。

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

    你可能会定义一个只需要一个字符串但返回一个对象的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。这不令人信服。

    我希望这能回答你的问题。这是一个古老的问题,对未来的一代来说更重要,他们仍在学习。

    当人们说这两种方法都不起作用时的问题。一个更聪明更有经验的人很可能会告诉你其他的智慧。

    如果有人覆盖了location对象怎么办?他们将为旧的浏览器做一个填充程序。它将获得一些需要填充的新特性,您的3年代码将失败。

    我最后一个要思考的问题。

    编写干净、清晰、有目的的代码可以为您的代码做一些不能正确或错误回答的事情。它的作用是使代码成为启用码。

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

    记录在案。使用

    window.location.href窗口位置