1、es6的新特性 參考:https://www.jianshu.com/p/390a65d7a353
- 新增變量聲明方式:let 塊級作用域 const常量聲明
- promise
- 箭頭函數:不需要function關鍵字來創建函數,可以省略return關鍵字,繼承當前上下文的this關鍵字
- Object.assign 淺拷貝
- ...擴展符號 淺拷貝 let arr = [2,3,4]; let result = [...arr];
- 函數參數可以直接設置默認值:function(name="xiao"){}
- ``反斜號模板拼接,變量用${}
- 結構賦值:let [a,b,c] = [1,2,3]
-
Set 的成員具有唯一性: let set2 = new Set([4,5,6,5])
console.log('array to set 1:', set2) =>{4, 5, 6} - Array.from([1,2,3]) // 返回和原數組一致
- 字符串操作
startsWith() 判斷字符串是否以 XX 開頭
endsWith() // 判斷字符串是否以 XX 結尾
- includes //
let str = 'liaoke'; str.includes('ao');
2、h5的新特性
- 語義標簽:header footer nav aside
- 表單
- 音頻 audio 視頻video
- canvas繪畫
- geolocation 定位
- localstorage:長期存儲數據,瀏覽器關閉后數據不丟失;
- sessionStorage 數據在瀏覽器關閉后自動刪除
- websockt 消息推送
- Drag 與Drop 拖放
3、css3的新特性
- border-radius 圓角
- box-shadow 邊框陰
- transform
- translate
- rotate
- scale
- flex
- 多媒體查詢@media
- 動畫animation
- 背景
- background-image背景圖片
- background-size:cover保持橫縱比與背景盒子最小大小,contain 保持橫縱比縮放成適合盒子最大大小
4、vue的生命周期
- beforeCreate:組件實例剛被創建
- created:組件實例創建完成,屬性已綁定,但是DOM還未生成
- beforeMount:模板編譯
- mounted:掛載
- beforeUpdate:
- updated:更新
- beforeDestroy:實例銷毀前
- destroyed:銷毀
5、vue的實現原理
- vue是一個典型的MVVM框架,模型Model是js對象,修改它則視圖VIEW自動更新。
- vue實現雙向數據綁定,需要三大模塊:
- Observer:能夠對數據對象的所有屬性進行監聽,如有變動可拿到最新值並通知訂閱者
- Compile:對每個元素節點的指令進行掃描和解析,根據指令模板替換數據,以及綁定想要的更新函數
- Watcher:作為鏈接Observer和Compile的橋梁,能夠訂閱並收到每個屬性變動的通知,執行指令綁定的相應回調函數,從而更新視圖。
6、原型,原型鏈
- 原型鏈:javaScript中的每個對象都有一個prototype屬性,我們稱之為原型,而原型的值也是一個對象,因此它也有自己的原型,這樣就串聯起來了一條原型鏈。原型鏈的鏈頭是object,它的prototype畢竟特殊,值為null
- 原型鏈的作用是用於對象繼承,函數A的原型屬性(prototype property)是一個對象,當這個函數被用作構造函數來創建實例時,該函數的原型屬性將被作為原型賦值給所有對象實例,比如我們新建一個數組,數組的方法便從數組的原型上繼承而來。
7、面向對象
- 面向對象是一種編程思想,簡稱OOP
- 面向對象的特征:封裝、繼承、抽象、多態
- js的面向對象編程,用一句話說就是抽象,封裝,繼承,多態。
- 抽象就是把一類事物的主要特征跟問題相關的特征抽取出來,使用函數進行封裝(不考慮內部實現原理,只考慮它功能使用)通過原型實現繼承(通俗理解就是父母能干的事孩子也能干比如吃飯,睡覺。在JS中,比如有一個對象A,A中有一些功能,現在從A中繼承出一個對象B,這個對象B就具有對象A的所有功能。)
- js是弱類型語言天然具備多態的特性
8、瀏覽器適配
9、安卓,ios適配
10、媒體查詢
11、盒模型
12、淺拷貝與深拷貝
- 淺拷貝是拷貝的一層,深層次的對象級別的就拷貝引用
- 深拷貝是拷貝多層,每一層級的數據都會拷貝出來
13、隱式轉換
14、數組去重
function distinct(a, b) { let arr = a.concat(b) arr = arr.sort() let result = [arr[0]] for (let i=1, len=arr.length; i<len; i++) { arr[i] !== arr[i-1] && result.push(arr[i]) } return result } // es6 new Set function distinct(a, b) { return Array.from(new Set([...a, ...b])) }
// 利用對象的屬性不會重復這一特性,校驗數組元素是否重復
function distinct(a, b) {
let arr = a.concat(b)
let result = []
let obj = {}
for (let i of arr) {
if (!obj[i]) {
result.push(i)
obj[i] = 1
}
}
return result
}
13、數組排序
14、閉包
- 自執行函數也是閉包也叫做沙箱,就是讓內部變量不會污染全局。
- 閉包的特點:可以讀取函數內部變量,將函數內部變量的值始終保存在內存中,保護函數內的變量不被更改
- 用途:
- 使用閉包可以訪問函數中的變量
- 可以使變量長期保存在內存中,生命
15、跨域以及jsonp的工作原理
概念:瀏覽器對於js的同源策略的限制 同源策略:同一個域名,同一個端口,相同的協議 jsonp: ajax直接請求存在跨域無權限訪問的問題 凡是擁有src屬性的標簽都可以跨域如script img iframe jsonp的跨域請求只能是get不能是post 原理:jsonp是一種非正式的傳輸協議,該協議允許用戶傳遞一個callback參數給服務器,然后服務端返回數據時會將這個callback 參數作為函數名包裹住JSON數據,這樣客戶端就可以隨意定制自己的函數來自動處理返回數據了。
16、變量聲明提升
17、事件冒泡與事件代理與事件隊列
- 事件冒泡:當一個元素接收到事件的時候,會把它接收到的事件傳給自己的父級,一直到window.
- 事件代理:
- $("div").on("click",function(){})
- js是單線程,任務按順序執行,如果一個任務很耗時,下一個任務不得不等待。為了避免這種阻塞,我們需要一種非阻塞機制。這種非阻塞機制是一種異步機制,即需要等待的任務不會阻塞主執行棧中同步任務的執行。
- 運行機制:
- 所有同步任務都在主線程上執行,形成執行棧。
- 等待任務的回調結果進入任務隊列
- 當主執行棧中的同步任務執行完畢后才會讀取任務隊列,任務隊列中的異步任務會塞入主執行棧
- 異步任務執行完畢后再次進入下一個循環
- 任務隊列分為:
- 微任務:promises
- 宏任務: setTimeout、setInterval等
18、rn
19、js繼承的幾種方式
- 原型鏈繼承
- 構造函數繼承
- 組合繼承(組合原型鏈與構造函數繼承)
20、rem em px的區別
- rem css3新增的相對單位,相對於根節點html的字體大小來計算的
- em:會繼承父級元素的字體大小
- px:像素的相對於顯示器屏幕分辨率而言的
21、vuex
- state:公共狀態
- Getters:計算屬性
- Mutations: 方法
- Actions:類似於mutaion,而不是直接變更狀態,可以包含任意異步操作
22、js的數據類型
簡單數據類型:Number String Boolean Object
引用類型:Object Array Function