最近好多小夥伴都跳槽去找工做,我只能在內心默默的支持他們能找到一份好的工做,這份前端面試大全送給個人小夥伴們,主要說的是前端一些經常使用的一些知識,說的不對的地方請小夥伴們即便指正出來,本身同時也回顧下這些知識。主要分如下幾個方邊來講:javascript
聲明在HTML文檔第一行,告訴瀏覽器用什麼文檔標準解析這個文檔。DOCTYPE不存在或格式不正確會致使文檔以兼容模式呈現。css
標準模式的排版 和JS運做模式都是以該瀏覽器支持的最高標準運行。在兼容模式中,頁面以寬鬆的向後兼容的方式顯示,模擬老式瀏覽器的行爲以防止站點沒法工做。html
每一個元素都有一個diaplay屬性,肯定該元素的類型,好比塊級元素默認值就是block,行內元素就是inline前端
行內元素:span a u i b img input slect。。。vue
塊級元素:div p ul li ol h1 h2。。。html5
link屬於html直接是在html中引入,import在css中引入只能引入cssjava
link在直接引入頁面的時候就就已經引入了,import須要在引入css的時候才引入,性能比較低。react
import是CSS2.1 提出的,只在IE5以上才能被識別,而link是html標籤,無兼容問題;jquery
html5新增了好多東西好比:git
一些語義化標籤 nav header footer
繪圖用到的canvas
用於媒體的video 和 audio 元素
本地離線存儲 localStorage 長期存儲數據,瀏覽器關閉後數據不丟失,sessionStorage 的數據在瀏覽器關閉後自動刪除;
表單控件,calendar、date、time、email、url、search
區分html5和html:
能夠按上文說的doctype區分也可使用標籤區分
語義化是html結構更清晰,便於瀏覽器解析,利於SEO搜素,使代碼更好理解,便於維護
<div style="height: 1px;background:red;overflow:hidden;"></div複製代碼
<div style="width: 100px;height: 100px;background:red;float: right;"></div>
<div style="width: 100px;height: 100px;background:blue;"></div>複製代碼
使用position定位:好處不用管盒子大小,就是不固定寬高
{
position: absolute;;
top: 50%;
left: 50%;
margin-left: -50%;
margin-top: -50%;
}複製代碼
也可使用calc計算出須要定位的值,須要知道寬高
還可使用transform: translate(-50%, -50%); 不須要知道寬高
固定寬高的話也可使用定位
{
position: absolute;;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
}複製代碼
也可使用flex
{
display: flex;
justify-content: center;
align-items: center;
}複製代碼
或者使用最新的grid,父元素必須加grid屬性
{
align-self: center;
justify-self: center;
}
複製代碼
還有一種使用table居中缺點也是父盒子寬高爲100%必須加display:table;
{
display: table-cell;
text-align: center;
vertical-align: middle;
}
複製代碼
清除浮動最好的方法就是使用:after
:after {
clear:both;
content:'';
display:block;
width:0;
height:0;
}複製代碼
也能夠先新建一個空元素來清除浮動
.clear{
clear:both;
height:0;
line-height:0;
font-size:0;
}複製代碼
還能夠給父元素增長overflow屬性
.over-flow{ overflow:auto; zoom:1; }//zoom:1;是在處理兼容性問題複製代碼
分爲兩種:ie盒模型和w3c盒模型
盒模型:內容(content)、填充(padding)、邊界(margin)、 邊框(border);
區別:IE的content部分把 border 和 padding計算了進去;
10.position有幾個值
{
width: 0;
height: 0;
border-width: 20px;
border-style: solid;
border-color: transparent transparent red transparent;
}複製代碼
由於瀏覽器的兼容問題,不一樣瀏覽器對有些標籤的默認值是不一樣的,若是沒對CSS初始化每每會出現瀏覽器之間的頁面顯示差別
最簡單的初始化方法: * {padding: 0; margin: 0;} (強烈不建議)
:nth-child :after :befor :checked :disable
transform :translate scale skew rotate; transtion ;animation ;shadow ;border-radius
js有五種基本類型:boolean string number null undefined 一種特殊類型:object
新增了Symbol(建立後獨一無二且不可變的數據類型 )
不在同一行聲明多個變量 不用全局函數 switch必須有default
函數聲明 function name(){}
函數表達式 var name = function(){}
new實例化(不經常使用)
做用域鏈的做用是保證執行環境裏有權訪問的變量和函數是有序的,做用域鏈的變量只能向上訪問,變量訪問到 window 對象即被終止,做用域鏈向下訪問變量是不被容許的。
this 指向直接調用者
this 指向 new 出來的對象
在事件中 this 指向這個事件的對象 IE 中的 attachEvent 的 this 指向全局 window
this 指的當前對象
null 表示一個對象被定義了,值爲「空值」;
undefined 表示不存在這個值。
null==undefined true
解析字符串,應該避免使用eval,不安全,很是耗性能(2次,一次解析成js語句,一次執行),也能夠把 JSON 字符串轉換爲 JSON 對象
閉包是指有權訪問另外一個函數做用域中變量的函數,建立閉包的最多見的方式就是在一個函數內建立另外一個函數,經過另外一個函數訪問這個函數的局部變量,利用閉包能夠突破做用鏈域,將函數內部的變量和方法傳遞到外部。
特性:
嚴格模式就是在 js 代碼前加 use strict 讓 Javascript 在更嚴格的條件下運行,使 JS 編碼更加規範化的模式,消除 Javascript 語法的一些不合理、不嚴謹之處,減小一些怪異行爲。
/* 封裝ajax函數
* @param {string}opt.type http鏈接的方式,包括POST和GET兩種方式
* @param {string}opt.url 發送請求的url
* @param {boolean}opt.async 是否爲異步請求,true爲異步的,false爲同步的
* @param {object}opt.data 發送的參數,格式爲對象類型
* @param {function}opt.success ajax發送並接收成功調用的回調函數
*/
function ajax(opt) {
opt = opt || {};
opt.method = opt.method.toUpperCase() || 'POST';
opt.url = opt.url || '';
opt.async = opt.async || true;
opt.data = opt.data || null;
opt.success = opt.success || function () {};
var xmlHttp = null;
if (XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
else {
xmlHttp = new ActiveXObject('Microsoft.XMLHTTP');
}var params = [];
for (var key in opt.data){
params.push(key + '=' + opt.data[key]);
}
var postData = params.join('&');
if (opt.method.toUpperCase() === 'POST') {
xmlHttp.open(opt.method, opt.url, opt.async);
xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=utf-8');
xmlHttp.send(postData);
}
else if (opt.method.toUpperCase() === 'GET') {
xmlHttp.open(opt.method, opt.url + '?' + postData, opt.async);
xmlHttp.send(null);
}
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
opt.success(xmlHttp.responseText);
}
};
}
複製代碼
同步:瀏覽器訪問服務器請求,用戶看獲得頁面刷新,從新發請求,等請求完,頁面刷新,新內容出現,用戶看到新內容,進行下一步操做
異步:瀏覽器訪問服務器請求,用戶正常操做,瀏覽器後端進行請求。等請求完,頁面不刷新,新內容也會出現,用戶看到新內容
push()pop()unshift()shift()splice()indexOf()sort()concat()jion()slice()reverse() includes()
.call() .apply() .bind()
jquery.extend 爲jquery 類添加類方法,能夠理解爲添加靜態方法
jquery.fn.extend: 源碼中 jquery.fn = jquery.prototype,因此對 jquery.fn 的擴展,就是爲jquery 類添加成員函數 使用:
jquery.extend擴展,須要經過 jquery 類來調用,而 jquery.fn.extend 擴展,全部jquery實例均可以直接調用
做用域 每一個方法都是做用域最大的是 window
做用域的方法和屬性只能在當前做用域使用
查找做用域 是從當前查找 再去上一級查找
同域名 同端口 同協議
100 Continue 繼續,通常在發送post請求時,已發送了http header以後服務端將返回此信息,表示確認,以後發送具體參數信息
200 OK 正常返回信息
201 Created 請求成功而且服務器建立了新的資源
202 Accepted 服務器已接受請求,但還沒有處理
301 Moved Permanently 請求的網頁已永久移動到新位置。
302 Found 臨時性重定向。
303 See Other 臨時性重定向,且老是使用 GET 請求新的 URI。
304 Not Modified 自從上次請求後,請求的網頁未修改過。
400 Bad Request 服務器沒法理解請求的格式,客戶端不該當嘗試再次使用相同的內容發起請求。
401 Unauthorized 請求未受權。
403 Forbidden 禁止訪問。
404 Not Found 找不到如何與 URI 相匹配的資源。
500 Internal Server Error 最多見的服務器端錯誤。
503 Service Unavailable 服務器端暫時沒法處理請求(多是過載或維護)
一、瀏覽器會開啓一個線程來處理這個請求,對 URL 分析判斷若是是 http 協議就按照 Web 方式來處理;
二、調用瀏覽器內核中的對應方法,好比 WebView 中的 loadUrl 方法;
三、經過DNS解析獲取網址的IP地址,設置 UA 等信息發出第二個GET請求;
四、進行HTTP協議會話,客戶端發送報頭(請求報頭);
五、進入到web服務器上的 Web Server,如 Apache、Tomcat、Node.JS 等服務器;
六、進入部署好的後端應用,如 PHP、Java、JavaScript、Python 等,找到對應的請求處理;
七、處理結束回饋報頭,此處若是瀏覽器訪問過,緩存上有對應資源,會與服務器最後修改時間對比,一致則返回304;
八、瀏覽器開始下載html文檔(響應報頭,狀態碼200),同時使用緩存;
九、文檔樹創建,根據標記請求所需指定MIME類型的文件(好比css、js),同時設置了cookie;
十、頁面開始渲染DOM,JS根據DOM API操做DOM,執行事件綁定等,頁面顯示完成。
MVVM 是 Model-View-ViewModel 的縮寫。
ViewModel 經過雙向數據綁定把 View 層和 Model 層鏈接了起來,而 View 和 Model 之間的同步工做徹底是自動的,無需人爲干涉,所以開發者只需關注業務邏輯,不須要手動操做DOM, 不須要關注數據狀態的同步問題,複雜的數據狀態維護徹底由 MVVM 來統一管理。
vue 實現數據雙向綁定主要是:採用數據劫持結合發佈者-訂閱者模式的方式,經過Object.defineProperty()來劫持各個屬性的setter,getter,在數據變更時發佈消息給訂閱者,觸發相應監聽回調。當把一個普通 Javascript 對象傳給 Vue 實例來做爲它的 data 選項時,Vue 將遍歷它的屬性,用 Object.defineProperty 將它們轉爲 getter/setter。用戶看不到 getter/setter,可是在內部它們讓 Vue 追蹤依賴,在屬性被訪問和修改時通知變化。
vue 的數據雙向綁定,將 MVVM 做爲數據綁定的入口,整合 Observer,Compile和Watcher三者,經過 Observer 來監聽本身的 model 的數據變化,經過 Compile 來解析編譯模板指令(vue中是用來解析 {{}}),最終利用 watcher 搭起 observer 和 Compile 之間的通訊橋樑,達到數據變化 —>視圖更新;視圖交互變化(input)—>數據 model 變動雙向綁定效果。
首頁能夠控制導航跳轉,beforeEach,afterEach 等,通常用於頁面 title 的修改。一些須要登陸才能調整頁面的重定向功能。
beforeEach 主要有3個參數 to,from,next:
只用來讀取的狀態集中放在 store 中; 改變狀態的方式是提交 mutations,這是個同步的事物; 異步邏輯應該封裝在 action 中。
在 main.js 引入 store,注入。新建了一個目錄 store,….. export 。
場景有:單頁應用中,組件之間的狀態、音樂播放、登陸狀態、加入購物車
能夠看我上篇文章微信小程序組件的封裝:juejin.im/post/5afcee…
給 HTML 元素添加 data-*屬性來傳遞咱們須要的值,而後經過 e.currentTarget.dataset 或onload的param參數獲取。但 data -名稱不能有大寫字母和不能夠存放對象
wxss的圖片引入需使用外鏈地址;
沒有 Body;樣式可直接使用 import 導入
使用 wx.getUserInfo 方法 withCredentials 爲 true 時 可獲取 encryptedData,裏面有 union_id。後端須要進行對稱解密
微信小程序獲取用戶信息須要用戶受權,首先用戶登錄微信小程序使用 wx.login 這個 API,而後經過 wx.getUserInfo 這個 API 在拿到用戶信息
取值也不同,小程序中,經過 this.data.reason 取值,vue 中,經過 this.reason 取值
父子組件間的通訊也不一樣
本文章參考資料:segmentfault.com/a/119000001…
很是感謝上邊那位做者。
另外我把項目放到了github上邊,但願小哥哥小姐姐們多多點贊,多多支持,有什麼疑問能夠在github上問我,謝謝你們閱讀本文章。
瞭解掘金秋招求職徵文活動更多信息👉秋招求職時,寫文就有好禮相送 | 掘金技術徵文