let變量,const常量。javascript
let和const都是塊級做用域。 const定義後不能修改常量。 let和const不存在變量提高 暫存死區 const一旦聲明必須賦值,不能使用null佔位
字符串
箭頭函數css
不須要 function 關鍵字來建立函數 省略 return 關鍵字 繼承當前上下文的 this 關鍵字
解構
展開運算符
import和export
import導入模塊、export導出模塊
class類
Promise前端
1.Promise 是一個 構造函數,是一個異步操做,它有三種狀態:pending(進行中)、fulfilled(已成功)和rejected(已失敗)。一旦狀態改變,就不會再改變。 2.Promise構造函數接受一個函數做爲參數,該函數的兩個參數分別是resolve(成功以後的回調函數)和reject (失敗以後的回調函數) 3.在 Promise 構造函數的 Prototype 屬性上,有一個 .then() 方法,也就是說,只要是 Promise 構造函數建立的實例,均可以訪問到 .then() 方法 4.Promise還有 .all方法,它能夠將多個 Promise 實例,包裝成一個新的 Promise 實例。 5.promise主要是一個異步轉同步這樣同樣函數,他是把異步操做用同步的方式寫出來
使用async函數可讓代碼簡潔不少,不須要像Promise同樣須要些then,不須要寫匿名函數處理Promise的resolve值,也不須要定義多餘的data變量,還避免了嵌套代碼。java
出於瀏覽器的同源策略限制,請求url的協議、域名、端口三者之間任意一個與當前頁面url不一樣即爲跨域。
解決方法:jsonp、CORS、反向代理、跨文檔通訊 API:window.postMessage()、設置document.domain解決沒法讀取非同源網頁的 Cookie問題。
反向代理配置:
json
cookie、localStorage、sessionStorage
都在本地(瀏覽器端)存儲數據
localStorage是永久存儲,除非手動刪除。
sessionStorage當會話結束(當前頁面關閉的時候,自動銷燬)
cookie的數據會在每一次發送http請求的時候,同時發送給服務器而localStorage、sessionStorage不會。跨域
原型:數組
__proto__
(隱式原型)屬性,屬性值是一個普通的對象__proto__
屬性指向它構造函數的prototype原型鏈:promise
ES6 class 繼承瀏覽器
構造函數繼承緩存
原型繼承
undefined表示"缺乏值",就是此處應該有一個值,可是尚未定義。
變量被聲明瞭,但沒有賦值時,就等於undefined。
調用函數時,應該提供的參數沒有提供,該參數等於undefined。
對象沒有賦值的屬性,該屬性的值爲undefined。
函數沒有返回值時,默認返回undefined。null表示"沒有對象",即該處不該該有值。
做爲函數的參數,表示該函數的參數不是對象。
做爲對象原型鏈的終點。
defer和async、動態建立DOM方式(建立script,插入到DOM中,加載完畢後callBack)、按需異步載入js
相同點
都用來改變this指向,第一個參數都是this指向的對象(指定運行函數做用域),均可以利用後面的參數傳參
不一樣點
1.call() 方法和apply() 方法做用相同, 區別在於接收參數的方式不一樣, call() 須要列舉全部傳入的全部參數
2.apply第二個是參數數組,Array實例,arguments對象
3.bind() 方法和前二者不一樣在於: bind() 方法會返回執行上下文被改變的函數而不會當即執行,而前二者是直接執行該函數,他的參數和call()相同
call() 方法
第一個參數: 就是你要改變的 this 指向
apply() 方法
第一個參數: 就是你要改變的 this 指向
第二個參數: 是一個數組或者僞數組
bind()
第一個參數: 就是你要改變的 this 指向
給函數傳遞參數,有兩個方式
能夠訪問另外一個函數做用域中變量的函數
特性
缺點:會使函數中的變量保存在內存中,內存消耗很大,致使內存泄漏。
解決方法:在退出函數前,將不適用的局部函數變量刪除。
1,工廠模式 2,構造函數模式 3,原型模式 4,混合構造函數和原型模式 5,動態原型模式 6,寄生構造函數模式 7,穩妥構造函數模式
深拷貝和淺拷貝最根本的區別在因而否真正獲取一個對象的複製實體,而不是引用。 假設B複製了A,修改A的時候,看B是否發生變化: 若是B跟着也變了,說明是淺拷貝,拿人手短!(修改堆內存中的同一個值) 若是B沒有改變,說明是深拷貝,自食其力!(修改堆內存中的不一樣的值) 淺拷貝(shallowCopy)只是增長了一個指針指向已存在的內存地址, 深拷貝(deepCopy)是增長了一個指針而且申請了一個新的內存,使這個增長的指針指向這個新的內存, 使用深拷貝的狀況下,釋放內存的時候不會由於出現淺拷貝時釋放同一個內存的錯誤。 淺複製:僅僅是指向被複制的內存地址,若是原地址發生改變,那麼淺複製出來的對象也會相應的改變。 深複製:在計算機中開闢一塊新的內存地址用於存放複製的對象。
函數防抖(debounce)是指在必定時間內,在動做被連續頻繁觸發的狀況下,動做只會被執行一次,也就是說當調用動做過n毫秒後,纔會執行該動做,若在這n毫秒內又調用此動做則將從新計算執行時間,因此短期內的連續動做永遠只會觸發一次,
函數節流(throttle)是指必定時間內執行的操做只執行一次,也就是說即預先設定一個執行週期,當調用動做的時刻大於等於執行週期則執行該動做,而後進入下一個新週期,
函數防抖事件觸發後延遲執行動做,適用於頻繁觸發的事件,函數防抖的實現關鍵是對setTimeout函數的應用函數節流在固定時間內只觸發一次操做,在週期內新事件觸發不執行動做,實現關鍵是flag和setTimeout的應用區別:函數防抖是將一個週期內的屢次操做經過重置計時器的方式合併到一次操做中,而函數節流是一個週期內只容許只執行一次操做,多餘的操做將直接return false。
懶加載的主要目的就是做爲服務器前端的優化,減小請求次數或者延遲請求數。
實現原理:先加載一部分數據,當觸發某個條件時利用異步(async)加載剩餘的數據,新獲得的數據不會影響原有數據的顯示,同時最大幅度的減小服務器端資源耗用。
實現方式:
在圖片沒有進入可視區域時,先不給<img>的src賦值,這樣瀏覽器就不會發送請求了,等到圖片進入可視區域再給src賦值。
Object.freeze()
Object.is()
它用來比較倆個值是否嚴格相等,與嚴格運算符(===) 的行爲基本一致。
Object.assign()
該方法用於對象合併,將源對象(source)的全部可枚舉屬性,複製到target目標對象裏
indexOf(): 返回某個指定的子字符串在字符串中第一次出現的位置。
lastIndexOf(): 返回某個指定的子字符串在字符串中最後出現的位置。
split(): 把字符串分割成字符串數組。
match(): 返回全部查找的關鍵字內容的數組。
substr(): 返回從指定下標開始指定長度的的子字符串。
Array.map()
將數組中的每一個元素調用一個提供的函數,結果做爲一個新的數組返回,並無改變原來的數組
Array.forEach()
將數組中的每一個元素執行傳進提供的函數,沒有返回值
Array.filter()
將全部元素進行判斷,將知足條件的元素做爲一個新的數組返回
Array.push()
在數組的後面添加新加元素,此方法改變了數組的長度
Array.pop()
在數組後面刪除最後一個元素,並返回數組,此方法改變了數組的長度
Array.shift()
在數組後面刪除第一個元素,並返回數組,此方法改變了數組的長度
Array.toString()
此方法將數組轉化爲字符串
Array.splice(開始位置, 刪除的個數,元素)
萬能方法,能夠實現增刪改
同步就至關因而 當客戶端發送請求給服務端,在等待服務端響應的請求時,客戶端不作其餘的事情。當服務端作完了才返回到客戶端。這樣的話客戶端須要一直等待。用戶使用起來會有不友好。
異步就是,當客戶端發送給服務端請求時,在等待服務端響應的時候,客戶端能夠作其餘的事情,這樣節約了時間,提升了效率。
for...in 遍歷對象
forEach 遍歷數組
for...of 遍歷數組 還支持大多數數組對象
hash後面有#號history沒有
在history以前基本都是使用hash來實現瀏覽器的進退
history怕刷新,刷新後會去請求服務器,若是服務器沒有響應的話,容易刷出404。
js css壓縮,圖片大小的控制,標籤的優化,使用緩存,文件合併。