- var let const 區別
- var是es5語法,let,const是es6語法。var有變量提升
- var,let是用來聲明變量,可修改。const是用來聲明常量,不可修改
- let,const 有塊級作用域(會形成暫時性死區),var沒有
- typeof能判斷哪些類型
- undefined,string,boolean,number,symbol (所有的值類型)
- object ([], {}, null)
- function
- 強制類型轉換和隱士類型轉化
- pareInt,parseFloat,toString
- ==,邏輯運算,if,+字符串拼接
- split() 和 join()的區別
split(): 將數組轉化爲字符串
join() : 將字符串轉化爲數組 - pop,push,shift,unshift 分別是什麼
分析: 功能是什麼,返回值是什麼,是否對原數組造成影響
pop刪除數組的最後一項,返回刪除的元素
shift刪除數組的第一項,返回刪除的元素
push在數組的最後一項增加一個元素,返回數組的長度
unshift在數組的第一項增加一個元素,返回數組的長度
都對數組造成影
純函數:(不該變原數組,返回一個數組)
concat,map,filter - slice 和splice的區別
slice 剪切 純函數
splice 剪接 非純函數 - [10,20,30].map(parseInt) 10 NAN NAN 拆解
- ajax中get和post的區別
- get一般用於查詢 post用於用戶提交數據
- get參數拼接在url上,post放在請求體中(數據可以很大)
- post有利於防範xsrf攻擊
- call 和 apply bind 的區別是什麼
改變this執行
call :第一個參數是this,後面是零散的數據
apply:第一個參數是this,後面是一個數組,或者一個結合
bind:第一個參數是this,但是返回一個函數,需要重新調用 - 事件委託(代理)是什麼
就是把一個元素響應事件的函數委託到另一個元素,利用冒泡的原理,把事件加到父級上,觸發執行效果 - 閉包是什麼,有什麼特性,負面影響
兩個函數存在嵌套關係,內部函數可以訪問外部函數的參數
函數作爲參數被傳入 函數作爲返回值
自由變量在函數定義的地方查找
變量會常駐內存,得不到釋放。不要亂用 - 如何阻止事件冒泡和默認行爲
- e.stopPropagation()
- e.preventDefault()
- 增刪改查dom節點方法
- creatElement,appendChild,removeChild,getelementById
- 如何減少dom操作
- dom查找是非常耗性能
- 緩存dom查詢結果
- 多次dom操作,合併到一次插入
- creatDocumentFragment
-
jsonp的原理,爲何不是真正的ajax
jsonp 是通過script標籤實現的
ajax是用過xmlHttpRequest
img ,script =>
jsonp -
load,ready區別
-
== ===
類型轉換 ,嚴格相等 -
函數聲明和函數表達式的區別
-
this的場景題
-
new Object() {}, Object.creat()區別
Object.creat() 創建一個空對象,把空對象的原型執行你傳入的對象 -
手寫trim,兼容
-
獲取最大值
-
js實現繼承
class
prototype -
什麼是json
json是一種數據格式,本質就是一個字符串
window.JSON是全局對象。JSON.stringifry JSON.parse -
如何捕獲js異常
try catch window.onerror -
獲取當前頁面的url參數
location.serach -
手寫深拷貝 object.assign不是深拷貝(只能一層)
-
requestAnimateFrame
-
性能優化:
原則:多使用內存,緩存,減少計算,網絡請求
方向:文件獲取更快,代碼執行更快 -
http在哪一層協議(作爲一個實習生,這個問題90%會問到)
(1):osi
這個模型,把網絡通信的工作分爲7層,分別是
物理層
,
數據鏈路層
,
網絡層(ip)
,
傳輸層(tcp:傳輸控制協議TCP,udp:用戶數據報協議)
,
會話層
,
表示層
,
應用層:文件傳輸協議(HTTP,FTP,NFS,SMTP)
User Agent:使得服務器能夠識別客戶使用的操作系統及版本、CPU 類型、瀏覽器及版本、瀏覽器渲染引擎、瀏覽器語言、瀏覽器插件等。
28:你瞭解的ssr是什麼,用ssr有什麼好處
29:從地址欄輸入url,發生了什麼
2.21 電話面試
- 簡述冒泡排序
- 簡述數組去重
- es6,es7新增了那些
- 箭頭函數的this和普通函數的this
- 怎麼樣形成閉包,怎麼解決閉包變量污染的情況
- typeof
- 改變this指向的方法
- vue組件通信
解答:
13: 簡述冒泡排序
(1) 首先判斷是否是數組,數組是否爲空
instanceof Object.prototype.toString.call() length
(2) 雙層循環:
外層循環控制趟數
內層循環控制次數
function bubble(arr) {
// 先判斷是否是數組或者是空數組
if (arr instanceof Array && arr.length > 1) {
for (let i = 0; i < arr.length - 1; i++) {
for (let j = 0; j < arr.length - 1 - i; j++) {
let temp = []
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1]
arr[j + 1] = temp
}
}
}
return arr
}
}
let arr = [1, 7, 4, 6, 3]
console.log(bubble(arr));
14 :數組去重
1:先獲取到數組的當前項let item = arr[i],然後去除當前項(split(i+1))
2:然後用當前項,和後面的每一項做比較,indexOf(有匹配到的返回-1)
3:將沒有重複的項,添加到新數組裏面
let arr = [1, 1, 8, 2]
let newArr = []
for (let i = 0; i < arr.length; i++) {
let item = arr[i]
arg = arr.slice(i + 1)
if (arg.indexOf(item) > -1) {
// 未找到和當前匹配的。會返回-1,現在>-1說明,有和當前匹配的,有重複的
} else {
newArr.push(item)
}
}
console.log(newArr);
16:箭頭函數和普通函數
普通函數的this:在運行時基於函數執行環境綁定的
箭頭函數:箭頭函數沒有this,箭頭函數的this繼承自所處上下問的this,call和apply無法改變this的執行
箭頭函數中沒有arguments類數組,只能基於…arg獲取傳遞參數的集合數組
箭頭函數不能被new執行,因爲箭頭函數沒有this葉沒有prototype
由於this只是在當前函數內部使用,而且js函數可以多層嵌套,使得我們無法得到最開始的this,這時我們可以用一個變量存儲起來/es6提供的箭頭函數
2.27 電話面試
- 離職原因
- 簡單的自我介紹
- 由於我簡歷一開始就寫的vue,所以問的vue比較多
- vue的雙向數據綁定裏面的defineProperty裏面的get,set是用什麼樣的設計模式實現的
- vue組件裏面data,你覺得爲什麼要有data這個東西呢 數據的監聽
- route router 使用上有什麼本質區別
- route 現在的前端技術都會加# 怎麼去掉#
- hash函數
- keep-alive 使用過嗎, 會用在什麼場景
- vue的核心是什麼
- 你又是怎麼理解數據和組件
- 有了框架會帶來一些便利,但是也會帶來一些缺陷:
- 加載耗時,打包,傳統的seo,歷史頁面,不適合開發大型項目
- h5,vue存數據,你有看過數據存在哪裏?是存在磁盤嗎?
- 怎麼搞兼容性問題?從哪些方面解決這些事情
- 瀏覽器渲染的性能優化
- 給你一個數組 ,把其中重複的數據 思想
3.13 面試
圖片自適應有哪些方式
h5的存儲
音頻視屏
flex的屬性
怎麼獲取視屏播放的事件
3.24 知乎面試
說說路由守衛
生命週期函數
MVVM和MVC的區別
數組排序
v-show v-if的區別
url輸入發生了什麼
jq的選擇器
3.14: 滴滴
1:說說http協議
2: 點擊事件