1.數組有什麼方法?
- map((item,index)=>{...})
- splice(刪除元素的起始位置,要刪除的個數,替換元素的值)
- slice(開始的索引,結束的索引) 截取元素
- join('',") 將數組變成字符串,同字符串的split()方法組合使用
- concat(數組,數組,數組...)實現數組的拼接
- push()從後面增加一個元素,pop() 方法用於刪除並返回數組的最後一個元素
- shift() 方法用於把數組的第一個元素從其中刪除,並返回第一個元素的值。 unshift() 方法可向數組的開頭添加一個或更多元素,並返回新的長度。
2.如何解決地獄回調?
promise async generator
3.localStorage和sessionstory區別
- localStorage生命週期是永久,除非主動清除localStorage信息,否則這些信息將永遠存在。存放數據大小爲一般爲5MB,而且它僅在客戶端(即瀏覽器)中保存,不參與和服務器的通信。
- sessionStorage僅在當前會話下有效,關閉頁面或瀏覽器後被清除。存放數據大小爲一般爲5MB,而且它僅在客戶端(即瀏覽器)中保存,不參與和服務器的通信。
複雜數據的存儲
存儲數據前:利用JSON.stringify將對象轉換成字符串
獲取數據後:利用JSON.parse將字符串轉換成對象
4.使用promise
1、基本用法:
(1)、首先我們new一個Promise,將Promise實例化
(2)、然後在實例化的promise可以傳兩個參數,一個是成功之後的resolve,一個是失敗之後的reject
(3)、Promise實例生成以後,可以用then方法分別指定Resolved狀態和Reject狀態的回調函數
參照 :https://www.cnblogs.com/nelson-hu/p/7777176.html
2.promise原理:
5.Let和var的區別
- ES6 新增了
let
命令,用來聲明局部變量。但是所聲明的變量,只在let
命令所在的代碼塊內有效,而且有暫時性死區的約束。let不允許在相同作用域內,重複聲明同一個變量。
ES6的let讓js真正擁有了塊級作用域,也是向這更安全更規範的路走,雖然加了很多約束,但是都是爲了讓我們更安全的使用和寫代碼。
6. 閉包
一句話可以概括:閉包是有權訪問其他作用域的函數,或者子函數在外調用,子函數所在的父函數的作用域不會被釋放。
7.類 Class類繼承
(1)ES5和ES6的類有什麼區別?
ES5的類叫做構造函數,
ES6中的類只是語法糖,它並沒有改變類實現的本質。
8.事件冒泡
事件冒泡:事件到達目標節點後,會沿着捕獲階段的路線返回。同樣,所有經過的節點都會觸發對應的事件
事件捕獲:當一個事件觸發後,從window對象出發,不斷經過下級節點,直到抵達最終目標節點(event.target)。在事件達到目標節點之前就是事件捕獲的phrase。所有經過的節點都會觸發該事件。
事件委託(代理)l利用事件冒泡
參看:https://blog.csdn.net/weixin_42787326/article/details/100705808
9.Url到瀏覽器展示頁面的都經過了哪些東西
一般會經歷以下幾個過程:
1、首先,在瀏覽器地址欄中輸入url
2、瀏覽器先查看瀏覽器緩存-系統緩存-路由器緩存,如果緩存中有,會直接在屏幕中顯示頁面內容。若沒有,則跳到第三步操作。
3、在發送http請求前,需要域名解析(DNS解析),解析獲取相應的IP地址。
4、瀏覽器向服務器發起tcp連接,與瀏覽器建立tcp三次握手。
5、握手成功後,瀏覽器向服務器發送http請求,請求數據包。
6、服務器處理收到的請求,將數據返回至瀏覽器
7、瀏覽器收到HTTP響應
8、讀取頁面內容,瀏覽器渲染,解析html源碼
9、生成Dom樹、解析css樣式、js交互
10、客戶端和服務器交互
11、ajax查詢
其中,步驟2的具體過程是:
瀏覽器緩存:瀏覽器會記錄DNS一段時間,因此,只是第一個地方解析DNS請求;
操作系統緩存:如果在瀏覽器緩存中不包含這個記錄,則會使系統調用操作系統,獲取操作系統的記錄(保存最近的DNS查詢緩存);
路由器緩存:如果上述兩個步驟均不能成功獲取DNS記錄,繼續搜索路由器緩存;
ISP緩存:若上述均失敗,繼續向ISP搜索。