location提供了與當前窗口中加載的文檔有關的信息,還提供了一些導航功能。location是一個很特別的對象,由於它既是 window對象的屬性,也是document對象的屬性。換句話說,window.location和document.location引用的是同一 個對象。javascript
console.log(window.location)
console.log(document.location)
location將URL解析成獨立的片斷,讓開發人員能夠經過不一樣的屬性訪問這些片斷java
儘管location.search返回從問號到URL末尾的全部內容,但卻沒有辦法逐個訪問其中的每一個查詢字符串參數。爲此,建立 一個函數,用以解析查詢字符串,而後返回包含全部參數的一個對象:瀏覽器
function getQueryStringArgs(){ //取得查詢字符串並去掉開頭的問號 var qs = location.search.length > 0 ? location.search.substring(1) : ""; //保存數據的對象 var args = []; //取得每一項 var items = qs.length ? qs.split("&") : []; var item,name,value; var len = items.length; //逐個將每一項添加到args對象中 for(var i = 0; i < len; i++){ item = items[i].split("="); name = decodeURIComponent(item[0]); value = decodeURIComponent(item[1]); if(name.length){ args[name] = value; } } return args; } location.search = "?name=abc&password=123&callback=fn"; console.log(getQueryStringArgs());//[name: "abc", password: "123", callback: "fn"]
使用location對象能夠經過不少方式來改變瀏覽器的位置緩存
【1】assign()服務器
使用assign()方法併爲其傳遞一個URL,能夠當即打開新URL並在瀏覽器的歷史記錄中生成一條記錄。若是是將location.href或window.location設置爲一個URL值,至關於調用assign()方法。網絡
location.assign("http://baidu.com");
window.location = "http://baidu.com"; document.location = "http://baidu.com"; location.href = "http://baidu.com";//最經常使用
[修改其餘屬性]每當修改location的屬性(hash除外),頁面都會以新URL從新加載函數
//修改hash值 location.hash = "#section1"; //修改查詢字符串 location.search = "?q=javascript"; //修改主機名 location.hostname = "www.baidu.com" //修改路徑 location.pathname = "mydir" //修改端口號 location.port = "8080"
【2】replace()spa
接收一個參數即要導航到的URL,但不會在歷史記錄中生成新記錄,也就是說用戶不能回到前一個頁面code
[注意]只有IE下有效對象
location.replace("http://baidu.com")
【3】reload()
從新加載當前顯示的頁面。位於reload()調用以後的代碼可能會也可能不會執行,這要取決於網絡延遲或系統資源等因素,爲些,最好將reload()放在代碼的最後一行。
[a]若不傳遞任何參數,頁面會以最有效的方式從新加載。也就是說,若是頁面自上次請求以來並無改變過,頁面就會從瀏覽器緩存中從新加載。
//有可能從緩存中加載 location.reload();
[b]若是要強制從服務器從新加載,則須要傳遞參數true
//從服務器從新加載 location.reload(true);