window對象 既是經過 JavaScript 訪問瀏覽器窗口的一個接口,又是 ECMAScript 規定的 Global 對象。javascript
全局做用域下聲明的變量均會成爲 window 對象的屬性/方法。let str = 'foo';
alert(window.str); // 'foo'複製代碼
其中, window.outerWidth 和 window.outerHeight 各瀏覽器表現不一,實用性不大。
vue
因爲 JavaScript 是單線程緣故,兩個定時器均不會在準確的時間執行,通常會稍遲於規定時間,而 "setInterval" 則部分可能會被跳過。(定時器的詳細描述及高級用法)
java
setTimeout(<function>,<timer>):<function>表示延遲執行的函數;<timer>表示過多久執行該函數,毫秒爲單位。chrome
setTimeout(function(){
alert('timeout!');
}, 1000); // 1秒後執行複製代碼
setInterval(<function>,<timer>):與 "setTimeout" 傳入的參數一致,表示每隔必定時間執行該函數。數組
setInterval(function(){
console.log('timeout!');
}, 1000); // 每隔1秒後執行複製代碼
有三種系統對話框,用於向用戶展現或獲取特定信息,均爲 window 對象的方法。
瀏覽器
alert(<string>); // 警告框,顯示參數字符串
let bool = confirm(<string>); // 確認框,顯示參數字符,能返回一個布爾值
let str = prompt(<string>); // 輸入提示框,顯示參數字符串,能返回用戶輸入的字符串複製代碼
經過 console 對象 內的方法能夠向 JavaScript 控制檯寫入消息。下面介紹幾個經常使用的。服務器
就是最經常使用的一種向控制檯打印內容的方法。除了通常用法console.log(value);
外,還有另外一種使用佔位符的用法:cookie
console.log('I like %s but I do not like %s.', 'Skittles', 'pus');
// I like Skittles but I do not like pus.複製代碼
常見的佔位符號:%o
(字母o)表示接受對象,%s
表示接受字符串,%d
表示接受數值。網絡
相似的打印信息還有console.info();
、console.warn();
、console.error();
,都是向控制檯打印信息,只是顯示的效果不同,並且各瀏覽器可能會有差異。效果以下圖:框架
用法和console.log()
一致,打印的內容也很類似,打印的內容相似文件樹樣式的交互列表,常用於對象。就我我的已知的,二者差異在於打印 HTML 元素,console.log()
打印元素的 HTML 文檔,console.dir()
打印的是該元素對象的屬性及方法,以下圖。
打印出表格形式,常用於打印包含多個對象的數組。如arr=[{a:1,b:2,c:3},...]
。效果以下圖:
還能夠傳入第二個參數,用於控制展現的字段,如console.table(arr, ["a", "b"]);
就只顯示上圖的a
和b
兩列。
注意,console.table()
只能處理最多1000行,所以它可能不適合全部數據集。
打印計數器,用於統計該行命令執行的次數。傳入的參數只有一個,就是計數器的名稱,如console.count('myCount');
。效果以下圖:
還有,能夠經過console.countReset('myCount');
重置計數器。
對輸入的表達式進行斷言,只有表達式爲false
時,才輸出相應的信息到控制檯。
console.assert(true, 1); // 不會打印
console.assert(false, 1); // Assertion failed: 1
複製代碼
向控制檯輸出一個堆棧跟蹤。效果以下:
打印計時器。必須配合console.timeEnd();
使用。用於計算函數執行耗時。都接受一個參數,就是計時器的名稱。示例以下:
function fn() {
console.time('myTimer');
for (let i = 0; i < 1000; i++) { }
console.timeEnd('myTimer');
}
fn(); // myTimer: 1ms複製代碼
將打印內容分組顯示。必須配合console.groupEnd()
使用。在控制檯上建立一個新的分組,隨後輸出到控制檯上的內容都會被添加一個縮進,表示該內容屬於當前分組,直到調用console.groupEnd()
以後,當前分組結束。分組內能夠包含另外的分組。傳入惟一參數,就是分組的名稱。示例以下:
這個沒什麼好說的,就是清除控制檯的全部打印內容。
location 對象 提供了與當前窗口中加載的文檔有關的信息,還提供了一些導航功能。簡言之跟URL有關。它既是 window 對象的屬性,也是 document 對象的屬性。
如下屬性均爲可讀寫,修改屬性值時,頁面會以新的URL刷新頁面(hash除外)。
location.assign('https://www.baidu.com');
。history 對象 是 widow 對象的屬性之一,用於保存用戶的上網記錄,從窗口被打開的一刻算起。
popstate
事件時的數據,能夠時任意類型;<title>表示該路由的標題,通常路由器都將其忽略;<url>只能使用同源的,可使用相對路徑。該方法會在 history.state 添加一條記錄,但不會刷新頁面,只改變路由地址,使用history.go(-1)
能返回上一個路由,並清除history.state
的相應記錄,這方法是 vue 框架的路由實現的原理。pushState()
相似,有一樣的參數,一樣在history.state
添加一條記錄,不一樣的是會將當前路由替換,致使history.go(-1)
不能返回當前路由。上面兩個方法還涉及一個事件:當活動歷史記錄條目更改時,將觸發popstate
事件。在 window 對象上能夠添加該事件,即window.addEventListener('popstate', <cb>);
,其中,事件對象event
中的state
屬性正是pushState
或repalceState
方法傳入的第一個參數。
當history.state
內有值,history.go(-1)
不會刷新頁面,只改變路由地址;不然會刷新頁面並跳轉。
navigation 對象 一樣屬於 window 的屬性。一般用於檢測瀏覽器的特性。
navigator.geolocation.getCurrentPosition(e=>{console.log(e)});
。false
。false
)。若某震動方式已經在進行中(當該方法調用時),則前一個震動方式中止,新的取而代之。(關於pattern參數的說明)