當前位置:首頁 » 網頁前端 » 前端js全部知識點
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

前端js全部知識點

發布時間: 2022-11-16 16:06:54

前端開發主要學哪些內容

1、HTML超文本標記性語言:盡量掌握盡可能多的標記或標記對。

(1)必須掌握的標記或標記對包括:<html>、<head>、<title>、<body>、<h1>、<p>、<a>、<img>、<table>、<tr>、<td>、<th>、<form>、<input>、<select>、<option>、<textarea>、<div>、<span>、<script>、<link>等。

4、操作系統

了解Unix和Linux的基本知識,對於開發人員有益無害。

5、網路伺服器

了解Web伺服器,包括對Apache的基本配置,htaccess配置技巧的掌握等。

❷ 前端開發需要學什麼啊

前端開發需要學習的內容包括PC網站布局、HTML5+CSS3基礎項目、webapp頁面布局等。

學習web前端開發,web開發工具有frontpage,可以使用word讓人輕松學習frontpage,另一個常見的是Dreamweaver,這兩個是最常用的HTML網頁製作工具。

HTML、CSS和JavaScript、Html是內容,CSS是性能,JavaScript是行為,與伺服器端語言的學習曲線相比,前端開發的學習曲線先快後慢。

Html最基本,先學習網頁的布局,然後CSS用於美化HTML頁面,並為頁面提供布局和格式,最後,學習JavaScript。

(2)前端js全部知識點擴展閱讀:

主要職能:

1、熟練使用DIV+CSS並結合JS負責產品的前端開發和頁面製作;

2、熟悉W3C標准和各主流瀏覽器在前端開發中的差異,能運用DIV+CSS解決瀏覽器的兼容性;

3、負責相關產品的需求以及前端程序的實現,提供合理的前端架構;

4、與產品、後台開發人員保持良好溝通,能快速理解、消化各方需求,並落實為具體的開發工作;

5、了解伺服器端的相關工作,在交互體驗、產品設計等方面有自己的見解。

參考資料來源:網路-前端開發

❸ 前端開發核心js要怎麼學

JS,全稱為JavaScript,是一種客戶端腳本語言,是前端開發學習內容當中的一個重要部分。

JavaScript可運行在所有主要平台的所有主流瀏覽器上,也可運行在每一個主流操作系統的伺服器端上。現如今我們在為網站寫任何一個主要功能的時候都需要有懂能夠用JavaScript寫前端的開發人員。我有web前端開發課程的全套視頻資料,可以發給你自學。

要學的內容主要有:

①計算機基礎以及PS基礎

②前端開發基礎(HTML5開發、JavaScript基礎到高級、jQuery網頁特效、Bootstrap框架)

③移動開發

④前端高級開發(ECMAScript6、Veu.js框架開發、webpack、前端頁面優化、React框架開發、AngularJS 2.0框架開發等)

⑤小程序開發

⑥全棧開發(MySQL資料庫、Python編程語言、Django框架等)

⑦就業拓展(網站SEO與前端安全技術)

互聯網行業目前還是最熱門的行業之一,學習IT技能之後足夠優秀是有機會進入騰訊、阿里、網易等互聯網大廠高薪就業的,發展前景非常好,普通人也可以學習。

想要系統學習,你可以考察對比一下開設有相關專業的熱門學校,好的學校擁有根據當下企業需求自主研發課程的能力,能夠在校期間取得大專或本科學歷,中博軟體學院、南京課工場、南京北大青鳥等開設相關專業的學校都是不錯的,建議實地考察對比一下。

祝你學有所成,望採納。

❹ 前端基本功:JS(十一)動畫封裝(CSS樣式獲取、JSON遍歷)

盒子 原來的位置 0 + 10 盒子現在的offsetLeft 10

|-5| = 5

這三個函數都是 數學函數
Math

比如說 console.log(Math.ceil(1.01)) 結果 是 2
console.log(Math.ceil(1.9)) 結果 2
console.log(Math.ceil(-1.3)) 結果 是 -1

比如說 console.log(Math.floor(1.01)) 結果 是 1
console.log(Math.floor(1.9)) 結果 1
console.log(Math.floor(-1.3)) 結果 是 -2

console.log(Math.round(1.01)) 結果 是 1
console.log(Math.round(1.9)) 結果 是 2

勻速動畫的原理: 盒子本身的位置 + 步長
緩動動畫的原理: 盒子本身的位置 + 步長 (不斷變化的)

( 缺陷:只能水平方向!隨後的「封裝運動框架單個屬性會進一步改進」 )

我們訪問得到css 屬性,比較常用的有兩種:

點語法可以得到 width 屬性 和 top屬性 ** 帶有單位的 。 100px
但是這個語法有非常大的
缺陷**, 不變的。
後面的width 和 top 沒有辦法傳遞參數的。
var w = width;
box.style.w

最大的優點 : 可以給屬性傳遞參數

我們想要獲得css 的樣式, box.style.left 和 box.style.backgorundColor
但是它只能得到 行內的樣式。
但是我們工作最多用的是 內嵌式 或者 外鏈式 。
怎麼辦?
核心: 我們怎麼才能得到內嵌或者外鏈的樣式呢?

外部(使用<link>)和內嵌(使用<style>)樣式表中的樣式(ie和opera)

兩個選項是必須的, 沒有偽類 用 null 替代

我們這個元素裡面的屬性很多, left top width ===
我們想要某個屬性, 就應該 返回該屬性,所有繼續封裝 返回當前樣式的 函數。

千萬要記得 每個 的意思 : 那是相當重要

flag在js中一般作為開關,進行判斷。

等動畫執行完畢再去執行的函數 回調函數
我們怎麼知道動畫就執行完畢了呢?
很簡單 當定時器停止了。 動畫就結束了

案例源碼:

in運算符也是一個二元運算符,但是對運算符左右兩個操作數的要求比較嚴格。in運算符要求第1個(左邊的)操作數必須是字元串類型或可以轉換為字元串類型的其他類型,而第2個(右邊的)操作數必須是數組或對象。只有第1個操作數的值是第2個操作數的屬性名,才會返回true,否則返回false

案例源碼:

鏈接: http://pan..com/s/1miEvqoo

密碼:7fv8

❺ 如何正確學習JavaScript

JavaScript作為網站前端的核心知識是非常重要的,但是如何學習JavaScript是很多初學者面對的一個難題,下面我說一下個人對於如何學習JavaScript的一點心得,希望能幫到大家。

學習每個編程語言可能都要從基礎的變數函數結構等學起,JavaScript相對於其他的編程語言在基礎上有一些比較有特點的地方,這些東西是尤其需要我們注意的,比如說自調函數、比如說變數值為空不是null而是undefined的等,這些東西都是和主流的編程的語言如c++、java等是有區別的,所以想要學好JavaScript,這些基礎的知識一定要把握好學習好才行。

2、關於學習JavaScript的進階

JavaScript進階知識更是有很多難理解的東西和不同於其他語言的東西,這些東西都是深入學習JavaScript的難點,簡單的說一下JavaScript是基於對象的瀏覽器腳本語言,但是為了使JavaScript也能夠支持面向對象編程,人們就使用了很多的方法來模擬面向對象的的特點,這些就變成了JavaScript的一些難點,比如說JavaScript的繼承要藉助原型、比如JavaScript的類需要使用構造函數來構造一個對象等,這些東西都是和其他支持面向對象的語言是不同的,所以就導致了一些難點。關於進階學習JavaScript,還有JavaScript一些深入的知識需要去理解比如原型鏈和閉包、比如收函數的作用域執行流程和上下文,這些東西都是JavaScript比較深入的知識、

最後說明,JavaScript作為前端的核心語言絕對沒有沒有想像的那麼簡單,要想學好JavaScript除了以上提到的知識和注意點,還需要的就是多動手和實踐,我們都知道網頁上的所有特效都是藉助JavaScript來實現,那麼我們就需要在學習JavaScript的過程中多使用原生的JavaScript代碼實現一些特效,當然學習使用jQuery等JavaScript類庫進行開發也十分的重要,但是這絕對不能是取代我們學習JavaScript的方法。

❻ 前端需要哪些知識

前端前景是很不錯的,像前端這樣的專業還是一線城市比較好,師資力量跟得上、就業的薪資也是可觀的,學習前端可以按照路線圖的順序,

0基礎學習前端是沒有問題的,關鍵是找到靠譜的前端培訓機構,你可以深度了解機構的口碑情況,問問周圍知道這家機構的人,除了口碑再了解機構的以下幾方面:

1. 師資力量雄厚

要想有1+1>2的實際效果,很關鍵的一點是師資隊伍,你接下來無論是找個工作還是工作中出任哪些的人物角色,都越來越愛你本身的技術專業前端技術性,也許的技術專業前端技術性則絕大多數來自你的技術專業前端教師,一個好的前端培訓機構必須具備雄厚的師資力量。

2. 就業保障完善

實現1+1>2效果的關鍵在於能夠為你提供良好的發展平台,即能夠為你提供良好的就業保障,讓學員能夠學到實在實在的知識,並向前端學員提供一對一的就業指導,確保學員找到自己的心理工作。

3. 學費性價比高

一個好的前端培訓機構肯定能給你帶來1+1>2的效果,如果你在一個由專業的前端教師領導並由前端培訓機構自己提供的平台上工作,你將獲得比以往更多的投資。

希望你早日學有所成。

❼ web前端需要掌握的哪些知識

一個合格的web前端需要掌握哪些技術?
最基礎的自然是JavaScript,HTML和css這三種語言。

首先了解下它們到底是什麼。

HTML是用戶看到的網頁的骨架,比如你會發現當前頁面分為左中右三個部分,其中還填充了不同的文字和圖片;每個子部分還會繼續細分,比如當前頁面的中間部分下方有輸入框等等。

CSS是網頁展示的細節控制,比如你會發現有的文字是紅底白色,有的子部分佔了頁面的二分之一寬,有的只佔六分之一,有些部分需要用戶進行某些操作(如點擊,滑動)才會出現等等,這些就是有CSS來控制。

JavaScript是負責捕捉用戶在瀏覽器上的操作,並與後端伺服器進行數據交換的腳本語言。當用戶在前端進行點擊,輸入等操作的時候,會觸動綁定了該動作的JavaScript腳本,然後JavaScript收集數據,調用後端的api介面,再將後端返回的數據交給HTML和CSS渲染出來。

一個網頁的HTML代碼和CSS代碼是可以直接在瀏覽器中查看的,你可以直接按F12,就能看到下圖右側的模塊,左右側紅框就是代碼與實際頁面的對應關系。因此如果你看到某個網站的布局很不錯,不妨點擊F12,進行學習。

前端框架
然而,實際應用中,已經很少有正規的項目組直接用上述三種語言進行web 前端開發了,而是使用很多封裝了這三種語言的框架,比如

Vue.js

,angular,react native等等。它們是來自谷歌和Facebook的大神項目組,基於自己的經驗,封裝了原生前端語言,實現了更多更復雜更酷炫的功能。因此,可以說,學會使用這些框架,能達到事半功倍的效果。

比如用了vue,它是自底向上增量開發的設計,其核心只關心圖層,而且還可以與其他庫或已存項目融合,學習門檻極其友好;另一方面,vue可以驅動單文件組件和vue生態系統支持的庫開發的復雜單頁應用。有了這個生態系統,可以說,vue是處在一個不斷壯大,不斷完善的欣欣向榮的狀態。

網路通信協議
由於前後端分離的趨勢,前端還需要了解很多網路通信協議的知識,這里不局限於http協議,因為據我的經驗,有時候我們還會用到websocket等協議。因此,前端需要簡單了解不同協議的特點以及使用方式,但是好消息是不用像學習計算機網路課程一樣對每種協議的原理都了解的特別透徹,只要學會如何用前端語言發送這種協議的請求就夠了。

❽ 前端開發JS框架之jQuery的基礎知識分享

jQuery對象是通過jQuery包裝DOM對象後產生的對象

注意:jQuery對象只能使用jQuery里的方法,DOM對象只能使用DOM對象的方法

基本選擇器

層級選擇器:

基本篩選器:

屬性選擇器:

表單篩選器:

篩選器方法:

jQuery的一些方法:


注意:對於標簽上有的能夠看到的屬性和自定義屬性用attr()方法

對於返回布爾值比如checkbox,radion,option這三個標簽是否被選中,用prop方法

事件綁定方式:

注意:DOM定義的事件可以用 .on()方法來綁定事件,但是jQuery定義的事件就不可以

常用事件有:

移除事件:把on改成off,就是移除 .on()綁定的事件

阻止後續事件執行:事件函數中添加 return false; (常用於阻止表單提交等)或者e.preventDefault()

阻止事件冒泡:添加e.stopPropagation()

利用父標簽去捕獲子標簽的事件

推薦閱讀:

前端開發框架之jQuery 和 Vue 的選擇

前端開發之15個jQuery小技巧分享

前端開發之JQuery入門基礎操作

前端開發框架jQuery的優勢與基礎知識分享

❾ 整理涵蓋很全很廣的前端知識點

HTML、CSS相關

html5新特性、語義化

瀏覽器渲染機制、重繪、重排

網頁生成過程:

重排(也稱迴流): 當 DOM 的變化影響了元素的幾何信息( DOM 對象的位置和尺寸大小),瀏覽器需要重新計算元素的幾何屬性,將其安放在界面中的正確位置,這個過程叫做重排。 觸發:

重繪: 當一個元素的外觀發生改變,但沒有改變布局,重新把元素外觀繪制出來的過程,叫做重繪。 觸發:

重排優化建議:

transform 不重繪,不迴流 是因為 transform 屬於合成屬性,對合成屬性進行 transition/animate 動畫時,將會創建一個合成層。這使得動畫元素在一個獨立的層中進行渲染。當元素的內容沒有發生改變,就沒有必要進行重繪。瀏覽器會通過重新復合來創建動畫幀。

css盒子模型

所有 HTML 元素可以看作盒子,在CSS中, "box model" 這一術語是用來設計和布局時使用。 CSS 盒模型本質上是一個盒子,封裝周圍的 HTML 元素,它包括:邊距,邊框,填充,和實際內容。 盒模型允許我們在其它元素和周圍元素邊框之間的空間放置元素。

css樣式優先順序

!important>style>id>class

什麼是BFC?BFC的布局規則是什麼?如何創建BFC?BFC應用?

BFC 是 Block Formatting Context 的縮寫,即塊格式化上下文。 BFC 是CSS布局的一個概念,是一個環境,裡面的元素不會影響外面的元素。 布局規則:Box是CSS布局的對象和基本單位,頁面是由若干個Box組成的。元素的類型和display屬性,決定了這個Box的類型。不同類型的Box會參與不同的 Formatting Context 。 創建:浮動元素 display:inline-block position:absolute 應用: 1.分屬於不同的 BFC 時,可以防止 margin 重疊 2.清除內部浮動 3.自適應多欄布局

DOM、BOM對象

BOM(Browser Object Model) 是指瀏覽器對象模型,可以對瀏覽器窗口進行訪問和操作。使用 BOM,開發者可以移動窗口、改變狀態欄中的文本以及執行其他與頁面內容不直接相關的動作。 使 JavaScript 有能力與瀏覽器"對話"。 DOM (Document Object Model) 是指文檔對象模型,通過它,可以訪問 HTML 文檔的所有元素。 DOM 是 W3C (萬維網聯盟)的標准。 DOM 定義了訪問 HTML 和 XML 文檔的標准: "W3C 文檔對象模型(DOM)是中立於平台和語言的介面,它允許程序和腳本動態地訪問和更新文檔的內容、結構和樣式。" W3C DOM 標准被分為 3 個不同的部分:

什麼是 XML DOM ? XML DOM 定義了所有 XML 元素的對象和屬性,以及訪問它們的方法。 什麼是 HTML DOM? HTML DOM 定義了所有 HTML 元素的對象和屬性,以及訪問它們的方法。

JS相關

js數據類型、typeof、instanceof、類型轉換

閉包(高頻)

閉包是指有權訪問另一個函數作用域中的變數的函數 ——《JavaScript高級程序設計》

當函數可以記住並訪問所在的詞法作用域時,就產生了閉包,

即使函數是在當前詞法作用域之外執行 ——《你不知道的JavaScript》

原型、原型鏈(高頻)

原型: 對象中固有的 __proto__ 屬性,該屬性指向對象的 prototype 原型屬性。

原型鏈: 當我們訪問一個對象的屬性時,如果這個對象內部不存在這個屬性,那麼它就會去它的原型對象里找這個屬性,這個原型對象又會有自己的原型,於是就這樣一直找下去,也就是原型鏈的概念。原型鏈的盡頭一般來說都是 Object.prototype 所以這就是我們新建的對象為什麼能夠使用 toString() 等方法的原因。

特點: JavaScript 對象是通過引用來傳遞的,我們創建的每個新對象實體中並沒有一份屬於自己的原型副本。當我們修改原型時,與之相關的對象也會繼承這一改變。

this指向、new關鍵字

this 對象是是執行上下文中的一個屬性,它指向最後一次調用這個方法的對象,在全局函數中, this 等於 window ,而當函數被作為某個對象調用時,this等於那個對象。 在實際開發中, this 的指向可以通過四種調用模式來判斷。

new

作用域、作用域鏈、變數提升

繼承(含es6)、多種繼承方式

(1)第一種是以 原型鏈的方式來實現繼承 ,但是這種實現方式存在的缺點是,在包含有引用類型的數據時,會被所有的實例對象所共享,容易造成修改的混亂。還有就是在創建子類型的時候不能向超類型傳遞參數。

(2)第二種方式是使用 借用構造函數 的方式,這種方式是通過在子類型的函數中調用超類型的構造函數來實現的,這一種方法解決了不能向超類型傳遞參數的缺點,但是它存在的一個問題就是無法實現函數方法的復用,並且超類型原型定義的方法子類型也沒有辦法訪問到。

(3)第三種方式是 組合繼承 ,組合繼承是將原型鏈和借用構造函數組合起來使用的一種方式。通過借用構造函數的方式來實現類型的屬性的繼承,通過將子類型的原型設置為超類型的實例來實現方法的繼承。這種方式解決了上面的兩種模式單獨使用時的問題,但是由於我們是以超類型的實例來作為子類型的原型,所以調用了兩次超類的構造函數,造成了子類型的原型中多了很多不必要的屬性。

(4)第四種方式是 原型式繼承 ,原型式繼承的主要思路就是基於已有的對象來創建新的對象,實現的原理是,向函數中傳入一個對象,然後返回一個以這個對象為原型的對象。這種繼承的思路主要不是為了實現創造一種新的類型,只是對某個對象實現一種簡單繼承,ES5 中定義的 Object.create() 方法就是原型式繼承的實現。缺點與原型鏈方式相同。

(5)第五種方式是 寄生式繼承 ,寄生式繼承的思路是創建一個用於封裝繼承過程的函數,通過傳入一個對象,然後復制一個對象的副本,然後對象進行擴展,最後返回這個對象。這個擴展的過程就可以理解是一種繼承。這種繼承的優點就是對一個簡單對象實現繼承,如果這個對象不是我們的自定義類型時。缺點是沒有辦法實現函數的復用。

(6)第六種方式是 寄生式組合繼承 ,組合繼承的缺點就是使用超類型的實例做為子類型的原型,導致添加了不必要的原型屬性。寄生式組合繼承的方式是使用超類型的原型的副本來作為子類型的原型,這樣就避免了創建不必要的屬性。

EventLoop

JS 是單線程的,為了防止一個函數執行時間過長阻塞後面的代碼,所以會先將同步代碼壓入執行棧中,依次執行,將非同步代碼推入非同步隊列,非同步隊列又分為宏任務隊列和微任務隊列,因為宏任務隊列的執行時間較長,所以微任務隊列要優先於宏任務隊列。微任務隊列的代表就是, Promise.then , MutationObserver ,宏任務的話就是 setImmediate setTimeout setInterval

原生ajax

ajax 是一種非同步通信的方法,從服務端獲取數據,達到局部刷新頁面的效果。 過程:

事件冒泡、捕獲(委託)

event.stopPropagation() 或者 ie下的方法 event.cancelBubble = true; //阻止事件冒泡

ES6

Vue

簡述MVVM

MVVM 是 Model-View-ViewModel 縮寫,也就是把 MVC 中的 Controller 演變成 ViewModel。Model 層代表數據模型, View 代表UI組件, ViewModel 是 View 和 Model 層的橋梁,數據會綁定到 viewModel 層並自動將數據渲染到頁面中,視圖變化的時候會通知 viewModel 層更新數據。

談談對vue生命周期的理解?

每個 Vue 實例在創建時都會經過一系列的初始化過程, vue 的生命周期鉤子,就是說在達到某一階段或條件時去觸發的函數,目的就是為了完成一些動作或者事件

computed與watch

watch 屬性監聽 是一個對象,鍵是需要觀察的屬性,值是對應回調函數,主要用來監聽某些特定數據的變化,從而進行某些具體的業務邏輯操作,監聽屬性的變化,需要在數據變化時執行非同步或開銷較大的操作時使用

computed 計算屬性 屬性的結果會被緩存,當 computed 中的函數所依賴的屬性沒有發生改變的時候,那麼調用當前函數的時候結果會從緩存中讀取。除非依賴的響應式屬性變化時才會重新計算,主要當做屬性來使用 computed 中的函數必須用 return 返回最終的結果 computed 更高效,優先使用

使用場景 computed :當一個屬性受多個屬性影響的時候使用,例:購物車商品結算功能 watch :當一條數據影響多條數據的時候使用,例:搜索數據

v-for中key的作用

vue組件的通信方式

父子組件通信

父->子 props ,子->父 $on、$emit` 獲取父子組件實例 parent、 parent 、children Ref 獲取實例的方式調用組件的屬性或者方法 Provide、inject` 官方不推薦使用,但是寫組件庫時很常用

兄弟組件通信

Event Bus 實現跨組件通信 Vue.prototype.$bus = new Vue() Vuex

跨級組件通信

$attrs、$listeners Provide、inject

常用指令

雙向綁定實現原理

當一個 Vue 實例創建時,Vue會遍歷data選項的屬性,用 Object.defineProperty 將它們轉為 getter/setter並且在內部追蹤相關依賴,在屬性被訪問和修改時通知變化。每個組件實例都有相應的 watcher 程序實例,它會在組件渲染的過程中把屬性記錄為依賴,之後當依賴項的 setter 被調用時,會通知 watcher重新計算,從而致使它關聯的組件得以更新。

v-model的實現以及它的實現原理嗎?

nextTick的實現

vnode的理解,compiler和patch的過程

new Vue後整個的流程

思考:為什麼先注入再提供呢??

答:1、首先來自祖輩的數據要和當前實例的data,等判重,相結合,所以注入數據的initInjections一定要在 InitState 的上面。2. 從上面注入進來的東西在當前組件中轉了一下又提供給後代了,所以注入數據也一定要在上面。

vm.[Math Processing Error]mount(vm.mount(vm.options.el) :掛載實例。

keep-alive的實現

作用:實現組件緩存

鉤子函數:

原理: Vue.js 內部將 DOM 節點抽象成了一個個的 VNode 節點, keep-alive 組件的緩存也是基於 VNode 節點的而不是直接存儲 DOM 結構。它將滿足條件 (pruneCache與pruneCache) 的組件在 cache 對象中緩存起來,在需要重新渲染的時候再將 vnode 節點從 cache 對象中取出並渲染。

配置屬性:

include 字元串或正則表達式。只有名稱匹配的組件會被緩存

exclude 字元串或正則表達式。任何名稱匹配的組件都不會被緩存

max 數字、最多可以緩存多少組件實例

vuex、vue-router實現原理

vuex 是一個專門為vue.js應用程序開發的狀態管理庫。 核心概念:

你怎麼理解Vue中的diff演算法?

在js中,渲染真實 DOM 的開銷是非常大的, 比如我們修改了某個數據,如果直接渲染到真實 DOM , 會引起整個 dom 樹的重繪和重排。那麼有沒有可能實現只更新我們修改的那一小塊dom而不要更新整個 dom 呢?此時我們就需要先根據真實 dom 生成虛擬 dom , 當虛擬 dom 某個節點的數據改變後會生成有一個新的 Vnode , 然後新的 Vnode 和舊的 Vnode 作比較,發現有不一樣的地方就直接修改在真實DOM上,然後使舊的 Vnode 的值為新的 Vnode 。

diff 的過程就是調用 patch 函數,比較新舊節點,一邊比較一邊給真實的 DOM 打補丁。在採取 diff 演算法比較新舊節點的時候,比較只會在同層級進行。 在 patch 方法中,首先進行樹級別的比較 new Vnode 不存在就刪除 old Vnode old Vnode 不存在就增加新的 Vnode 都存在就執行diff更新 當確定需要執行diff演算法時,比較兩個 Vnode ,包括三種類型操作:屬性更新,文本更新,子節點更新 新老節點均有子節點,則對子節點進行 diff 操作,調用 updatechidren 如果老節點沒有子節點而新節點有子節點,先清空老節點的文本內容,然後為其新增子節點 如果新節點沒有子節點,而老節點有子節點的時候,則移除該節點的所有子節點 老新老節點都沒有子節點的時候,進行文本的替換

updateChildren 將 Vnode 的子節點Vch和oldVnode的子節點oldCh提取出來。 oldCh和vCh 各有兩個頭尾的變數 StartIdx和EndIdx ,它們的2個變數相互比較,一共有4種比較方式。如果4種比較都沒匹配,如果設置了 key ,就會用 key 進行比較,在比較的過程中,變數會往中間靠,一旦 StartIdx>EndIdx 表明 oldCh和vCh 至少有一個已經遍歷完了,就會結束比較。

你都做過哪些Vue的性能優化?

你知道Vue3有哪些新特性嗎?它們會帶來什麼影響?

更小巧、更快速 支持自定義渲染器 支持搖樹優化:一種在打包時去除無用代碼的優化手段 支持Fragments和跨組件渲染

模板語法99%保持不變 原生支持基於class的組件,並且無需藉助任何編譯及各種stage階段的特性 在設計時也考慮TypeScript的類型推斷特性 重寫虛擬DOM 可以期待更多的編譯時提示來減少運行時的開銷 優化插槽生成 可以單獨渲染父組件和子組件 靜態樹提升 降低渲染成本 基於Proxy的觀察者機制 節省內存開銷

檢測機制 更加全面、精準、高效,更具可調試式的響應跟蹤

實現雙向綁定 Proxy 與 Object.defineProperty 相比優劣如何?

React

1、react中key的作用,有key沒key有什麼區別,比較同一層級節點什麼意思?

2、你對虛擬dom和diff演算法的理解,實現render函數

虛擬DOM 本質上是 JavaScript 對象,是對 真實DOM 的抽象表現。 狀態變更時,記錄新樹和舊樹的差異 最後把差異更新到真正的 dom 中 render函數:

3、React組件之間通信方式?

Context 提供了一個無需為每層組件手動添加 props ,就能在組件樹間進行數據傳遞的方法.如果你只是想避免層層傳遞一些屬性,組件組合( component composition )有時候是一個比 context 更好的解決方案。 5. 組件組合缺點:會使高層組件變得復雜

4、如何解析jsx

5、生命周期都有哪幾種,分別是在什麼階段做哪些事情?為什麼要廢棄一些生命周期?

componentWillMount、componentWillReceiveProps、componentWillUpdate在16版本被廢棄,在17版本將被刪除,需要使用UNSAVE_前綴使用,目的是向下兼容。

6、關於react的優化方法

使用return null而不是CSS的display:none來控制節點的顯示隱藏。保證同一時間頁面的DOM節點盡可能的少。

不要使用數組下標作為key 利用 shouldComponentUpdate 和 PureComponent 避免過多 render function ; render 裡面盡量減少新建變數和bind函數,傳遞參數是盡量減少傳遞參數的數量。 盡量將 props 和 state 扁平化,只傳遞 component 需要的 props (傳得太多,或者層次傳得太深,都會加重 shouldComponentUpdate 裡面的數據比較負擔),慎將 component 當作 props 傳入

使用 babel-plugin-import 優化業務組件的引入,實現按需載入 使用 SplitChunksPlugin 拆分公共代碼 使用動態 import ,懶載入 React 組件

7、綁定this的幾種方式

8、對fiber的理解

9、setState是同步還是非同步的

10、Rex、React-Rex

Rex的實現流程

用戶頁面行為觸發一個 Action ,然後 Store 調用 Recer ,並且傳入兩個參數:當前 State 和收到的 Action 。 Recer 會返回新的 State 。每當 state 更新之後, view 會根據 state 觸發重新渲染。

React-Rex:

Provider :從最外部封裝了整個應用,並向 connect 模塊傳遞 store 。 Connect :

11、對高階組件的理解

高階組件是參數為組件,返回值為新組件的函數。 HOC 是純函數,沒有副作用。 HOC 在 React 的第三方庫中很常見,例如 Rex 的 connect 組件。

高階組件的作用:

12、可以用哪些方式創建 React 組件?

React.createClass()、ES6 class 和無狀態函數

13、 React 元素與組件的區別?

組件是由元素構成的。元素數據結構是普通對象,而組件數據結構是類或純函數。

Vue與React對比?

數據流:

react 主張函數式編程,所以推崇純組件,數據不可變,單向數據流,

vue 的思想是響應式的,也就是基於是數據可變的,通過對每一個屬性建立Watcher來監聽,當屬性變化的時候,響應式的更新對應的虛擬dom。

監聽數據變化實現原理

組件通信的區別:jsx和.vue模板。

性能優化

vuex 和 rex 之間的區別?

從實現原理上來說,最大的區別是兩點:

Rex 使用的是不可變數據,而 Vuex 的數據是可變的。 Rex 每次都是用新的 state 替換舊的 state ,而 Vuex 是直接修改

Rex 在檢測數據變化的時候,是通過 diff 的方式比較差異的,而 Vuex 其實和Vue的原理一樣,是通過 getter/setter 來比較的(如果看 Vuex 源碼會知道,其實他內部直接創建一個 Vue 實例用來跟蹤數據變化)

瀏覽器從輸入url到渲染頁面,發生了什麼?

網路安全、HTTP協議

TCP UDP 區別

Http和Https區別(高頻)

GET和POST區別(高頻)

理解xss,csrf,ddos攻擊原理以及避免方式

XSS ( Cross-Site Scripting , 跨站腳本攻擊 )是一種代碼注入攻擊。攻擊者在目標網站上注入惡意代碼,當被攻擊者登陸網站時就會執行這些惡意代碼,這些腳本可以讀取 cookie,session tokens ,或者其它敏感的網站信息,對用戶進行釣魚欺詐,甚至發起蠕蟲攻擊等。

CSRF ( Cross-site request forgery ) 跨站請求偽造 :攻擊者誘導受害者進入第三方網站,在第三方網站中,向被攻擊網站發送跨站請求。利用受害者在被攻擊網站已經獲取的注冊憑證,繞過後台的用戶驗證,達到冒充用戶對被攻擊的網站執行某項操作的目的。

XSS避免方式:

CSRF 避免方式:

DDoS 又叫分布式拒絕服務,全稱 Distributed Denial of Service ,其原理就是利用大量的請求造成資源過載,導致服務不可用。