⑴ 前端學習需要學些什麼
前端學習的主要內容包含三個部分:基礎部分、設計部分還有代碼部分。學習前端課程推薦【達內教育】,該機構致力於面向IT互聯網行業培養人才,達內大型T專場招聘會每年定期舉行,為學員搭建快捷高效的雙選綠色通道。感興趣的話點擊此處,免費學習一下
【達內Web前端課程】主要分為五大階段,真實上線、中大型電商項目,幫助學員學到真材實料,課程內容更貼近企業工作內容。
第一階段:伺服器端技術 課程內容包括:項目導入、資料庫和 SQL、JS 基礎、Node.js、階段項目。
第二階段:前端核心技術 課程內容包括:HTML 基礎、HTTP&AJAX、階段項目、CSS 基礎、CSS3 高級、響應式 &Bootstrap、階段項目。
第三階段:前端進階技術 課程內容包括:JS 高級、BOM&DOM、階段項目、jQuery、階段項目項、Vue.js、階段項目。
第四階段:H5 移動端開發 課程內容包括:Vue.js 組件庫、階段項目、H5 高級、階段項目、微信、階段項目、HybridApp。
第五階段:框架技術 課程內容包括:Angular 生態系統、階段項目、React 生態系統、階段項目、Python Web、畢業項目。
想了解更多有關前端學習的相關信息,推薦咨詢【達內教育】。該機構是引領行業的職業教育公司,致力於面向IT互聯網行業培養人才,達內大型T專場招聘會每年定期舉行,為學員搭建快捷高效的雙選綠色通道,在提升學員的面試能力、積累面試經驗同時也幫助不同技術方向的達內學員快速就業!達內IT培訓機構,試聽名額限時搶購。
⑵ 前端筆記 — canvas
在HTML中添加<canvas>元素,必須設置width跟height屬性
如果瀏覽器不支持canvas元素,就會顯示標簽中間的內容
要在畫布上繪圖,需要取得繪圖上下文,調用getContext('2d')就可以取得canvas的2d上下文
使用toDataURL方法可以導出canvas上繪制的圖像,接受一個參數,圖像的MIME類型格式
常用的屬性控制
矩形是唯一一種可以直接在上下文中繪制的形狀
與矩形有關的方法包括fillRect()、strokeRect()和clearRect(),這三個方法接受4個參數(x, y, width, height)
fillRect()繪制的矩形會填充指定的顏色,顏色通過fillStyle屬性指定
strokeRect()繪制的矩形會使用指定的顏色描邊,描邊顏色通過strokeStyle屬性指定
clearRect()方法用於清除畫布上的矩形區域
要繪制路徑,首選必須調用beginPath()方法,表示開始繪制新路徑,繪制路徑主要有以下方法
調用closePath()可以將路徑的起點與終點連接。路徑完成後,可以使用fill()填充,或者使用stroke()描邊。最後還可以調用clip(),在路徑上創建一個剪切區域
繪制文本主要有兩個方法,fillText()和strokeText(),這個兩個方法接受4個參數:要繪制的文本字元串、x坐標、y坐標和可選的最大像素寬度。這兩個方法都以下列3個屬性為基礎
上下文提供了輔助確定文本大小的方法measureText(),這個方法接受一個參數,即要繪制的文本,返回一個TextMetrics對象,這個對象有一個width屬性,表示文本的寬度
為上下文應用變換,會導致使用不同的變換矩陣應用處理,從而產生不同的結果,可以通過如下方法來修改變換矩陣
如果想把一副圖像繪制到畫布上,可以使用drawImage()方法,調用這個方法時,可以使用三種不同的參數組合,最簡單的方式是傳入一個<img>元素,以及繪制該圖像的起點x和y坐標
可以多傳入兩個參數,表示目標寬度和高度
還可以把圖像中的某個區域繪制到上下文中,需要傳入9個參數:要繪制的圖像、源圖像的x坐標、源圖像的y坐標、源圖像的寬度、源圖像的高度、目標圖像的x坐標、目標圖像的y坐標、目標圖像的寬度、目標圖像的高度
除了給drawImage()方法傳入<img>元素外,還可以傳入另一個<canvas>元素作為其第一個參數。結合drawImage()和其他方法,可以對圖像進行各種基本操作,操作的結果可以通過toDataURL()方法獲得,toDataURL()是canvas的方法而不是上下文的方法
上下文會根據以下幾個屬性,自動為形狀或路徑繪制陰影,需要在繪制路徑之前設置
漸變有CanvasGradient實例表示,要創建一個新的線性漸變,可以調用createLinearGradient()方法,接受4個參數:startX、startY、endX、endY。創建漸變後,使用addColorStop()方法來指定色標,接受兩個參數:色標位置和css顏色值。色標位置是一個0(開始的顏色)到1(結束的顏色)之間的數字
表示從一個畫布上的點(30, 30)到點(70, 70)的漸變。起點的色標是白色,終點的色標是黑色。然後可以把fillStyle或者strokeStyle設置為這個對象,從而使用漸變來繪制形狀或描邊
要創建徑向漸變,可以使用createRadialGradient()方法,接受6個參數,對應著兩個圓的圓心和半徑
模式其實就是重復的圖像,可以用來填充或描邊圖像,使用createPattern()方法並傳入兩個參數:一個<img>元素和一個表示如何重復圖像的字元串。其中第二個參數的值與css的background-repeat屬性值相同,包括「repeat」、「repeat-x」、「repeat-y」和「no-repeat」
模式與漸變一樣,都是從畫布的原點(0, 0)開始的,將填充樣式設置為模式對象,只表示在某個特定的區域內顯示重復的圖像,而不是要從某個位置開始繪制重復圖像
上下文可以通過getImageData(x, y, width, height)取得原始圖像數據
這里返回的對象是ImageData的實例,每個ImageData對象都有三個屬性:width、height和data。其中data是一個數組,保存著圖像中每一個像素的數據。
在data數組中,每一個像素用4個元素來保存,分別表示紅、綠、藍和透明度。因此第一個像素的數據保存在數組的第0到第3個元素中,數組中的每個元素的值都介於0到255之間(包括0和255)
putImageData()方法可以將imageData表示的圖像繪制到畫布上
globalAlpha:用於指定所有繪制的透明度,是一個介於0到1之間的值,默認值為1
如果所有的後續操作都要基於相同的透明度,可以先把globalAlpha設置為適當的值,然後繪制
globalCompositionOperation:表示後繪制的圖形怎樣與先繪制的圖形結合,可能的值如下
⑶ web前端學習筆記(二)清除浮動的幾種方法
1.父標簽overflow:hidden
2.樣式屬性clear,屬性值一般是both,left,right。
⑷ 《web前端筆記7》js字元—獲取、查找、遍歷、提取、替換方法總結
(1)字元串就是零個或多個排在一起的字元。
(2)放在單引號或雙引號之中。 'abc' "abc"。
(3)單引號字元串的內部,可以使用雙引號。
(4)雙引號字元串的內部,可以使用單引號。
(5)反引號`` :反引號允許跨行。
反引號允許字元串跨越多行並可以使用
${…} 在字元串中嵌入表達式。
(1)charAt 方法返回指定位置的字元,參數是從0開始編號的位置。
找一個字元串中的某個位置是那個字元串。
charCodeAt:返回字元串指定位置的 Unicode 碼點(十進製表示)
(2)[]
字元串可以被視為字元串數組,因此可以用數組的方括弧運算符,用來返回某個位置的字元
但是字元串只是數組的相似性而已實際上、沒辦法改變字元串中的某個字元
length 只是返回了字元串的長度,該屬性沒辦法改變
字元串使用Unicode字元集,js內部所有的都是Unicode表示的。
JavaScript中的字元串使用的是 UTF-16 編碼。
toLowerCase() 和 toUpperCase()方法可以改變大小寫。
String對象是js原生提供的三個包裝對象之一。用來生成字元串對象。
(1)構造函數
字元串對象是一個類數組對象,很像數組,但不是真正的數組。
(2)將任意的值轉成字元
用於連接兩個字元串,返回一個新字元串,不改變原字元串。
從原字元串取出子字元串並返回,不改變原字元串。
它的第一個參數是子字元串的開始位置,
第二個參數是子字元串的結束位置(不含該位置)。
如果省略第二個參數,則表示子字元串一直到原字元串結束。
用於從原字元串取出子字元串並返回,不改變原字元串,跟slice方法很相像。
它的第一個參數表示子字元串的開始位置,
第二個位置表示結束位置(返回結果不含該位置)
如果省略第二個參數,則表示子字元串一直到原字元串結束。
區別:slice 和 substring的區別?
slice:
如果參數是負值,表示從結尾開始倒數計算的位置,即該負值加上字元串長度。
如果第一個參數大於第二個參數(正數情況下),slice()方法返回一個空字元串。
substring:
如果第一個參數大於第二個參數,substring方法會自動更換兩個參數的位置。
如果參數是負數,substring方法會自動將負數轉為0。
由於這些規則違反直覺,因此不建議使用substring方法,應該優先使用slice。
總結:獲取子字元串,使用 slice 或 substring。
用於確定一個字元串在另一個字元串中第一次出現的位置,
返回結果是匹配開始的位置。如果返回-1,就表示不匹配。
indexOf方法還可以接受第二個參數,表示從該位置開始向後匹配。
lastIndexOf
lastIndexOf方法的用法跟indexOf方法一致,主要的區別是lastIndexOf從尾部開始匹配,indexOf則是從頭部開始匹配。
總結:查找子字元串時,使用 indexOf 或 includes/startsWith/endsWith 進行簡單檢查。
endsWith 用來判斷當前字元串是否是以另外一個給定的子字元串「結尾」的,根據判斷結果返回 true 或 false。
用於去除字元串兩端的空格,返回一個新字元串,不改變原字元串。
toLowerCase方法用於將一個字元串全部轉為小寫,
toUpperCase則是全部轉為大寫。
它們都返回一個新字元串,不改變原字元串
split方法按照給定規則分割字元串,返回一個由分割出來的子字元串組成的數組。
如果分割規則為空字元串,則返回數組的成員是原字元串的每一個字元。
如果省略參數,則返回數組的唯一成員就是原字元串。
split方法還可以接受第二個參數,限定返回數組的最大成員數。
返回一個新字元串,表示將原字元串重復n次。
字元串補全長度的功能。如果某個字元串不夠指定長度,
會在頭部或尾部補全。padStart()用於頭部補全,padEnd()用於尾部補全。
trimStart()消除字元串頭部的空格,
trimEnd()消除尾部的空格。
返回一個由替換值(replacement)替換部分或
所有的模式(pattern)匹配項後的新字元串。
模式可以是一個字元串或者一個正則表達式,
替換值可以是一個字元串或者一個每次匹配都要調用的回調函數。
如果pattern是字元串,則僅替換第一個匹配項.
web前端筆記4-有講 如果感興趣、請參考之前文章
⑸ 如何學好前端從入門開始
一 零基礎小白應該怎麼學習前端才能少走彎路?
關於前端這一塊的學習,我不主張自學,因為前端的知識體系是很龐大的,如果你自學,遇到一些問題,你自己很難解決,至少需要有專業的前端人士指導你,站在高手的肩膀上,才能看的更高更遠,當然很多小夥伴會說,我也知道學習前端有高手指點挺好啊,可是我怎麼知道去哪裡找高手,高手又為什麼願意指導我呢?
這個問題問的好,其實現在是互聯網時代,網上有很多的相關視頻和直播課,我平時就經常去上網聽一些前端高手講課。作為想從事前端這個行業的小夥伴,一定要有一個平常心,只要能學到知識,去學就是了,不要磨磨唧唧的的做什麼事情,否則什麼也做不好。
二 學習前端,你需要具備哪些素質?
(1)如果web的任何一個元素(web界面,靈活的編程風格等)有一點吸引了你,讓你著實著迷,恭喜你,有了一個完美的開始。確認一下自己是否喜歡和合適前端,而不是為了一份看起來體面而且薪水不菲的工作。
(2)不斷學習,每日的積累,關注前端動態,是你跟上前端潮流的主要途徑。前端的體系過於龐大,技術框架爭涌而出,如果你經常抱怨累死碼農的節奏,那就審視一下自己對前端的態度。
(3)主抓基礎,避免盲目。前端領域知識點很多,值得學的東西也很多,聰明的人懂得花時間學習成體系的知識並且研究得足夠深入,而不是盲目的看到別人用什麼框架就去學什麼。只停留在實踐運用的階段,到頭來框架們都一個一個被淘汰,你仍在原地踏步。
(4)整理總結,先模仿後創造。將每日的積累做好規整,記錄到博客也好,筆記也好。多看看牛人的源代碼,等你達到了一定的層次水準,自然會得心應手。
(5)持有一顆造福前端社區的心。寫一些有意思的小工具、插件,推廣出去, 始終堅信,在從事前端的道路上You are not alone。
(6)要有專業人士的指導,尤其是學習前端找工作的,不要妄想自己一個人自學前端能找到工作,現在非常難,如果沒有一個明白人幫你解決一下問題,會有非常多的彎路,中間很容易放棄,學習的不專業不說,最重要是浪費時間。
(7)一個好的心態和一個堅持的心很重要,很多沖著高薪的人想學習前端,但是能學到最後的沒有幾個,遇到困難就放棄了,這種人到處都是,就是因為有的東西難,所以他的回報才很大,我們評判一個前端開發者是什麼水平,就是他解決問題的能力有多強。
⑹ Web前端工程師你知道JavaScript中常用的排序演算法嗎
今天小編要跟大家分享的文章是關於JavaScript中常用的排序演算法。相信很多剛剛從事Web前端工作或者准備面試的小夥伴們對此還不是很了解,下面就讓小編來為大家介紹一下吧!
一、冒泡排序
冒泡排序是我們在編程演算法中,算是比較常用的排序演算法之一,在學習階段,也是最需要接觸理解的演算法,所以我們放在第一個來學習。
演算法介紹:
·___冉舷嗔詰牧礁鱸,如果前一個比後一個大,則交換位置。
·___諞宦職炎畲蟮腦胤諾攪俗詈竺妗
·___捎諉看聞判蜃詈笠桓齠際親畲蟮模災蟀湊詹街1排序最後一個元素不用比較。
冒泡演算法改進:
設置一個標志,如果這一趟發生了交換,則為true。否則為false。如果這一趟沒有發生交換,則說明排序已經完成。代碼如下:
假如數組長度是20,如果只有前十位是無序排列的,後十位是有序且都大於前十位,所以第一趟遍歷排序的時候發生交換的位置必定小於10,且該位置之後的必定有序,我們只需要排序好該位置之前的就可以,因此我們要來標記這個位置就可以了,即可以記錄每次掃描中最後一次交換的位置,下次掃描的時候只要掃描到上次的最後交換位置就行了,因為後面的都是已經排好序的,無需再比較,代碼如下:
每一次循環從兩頭出發算出最大和最小值,代碼如下:
在代碼3的基礎上記錄每次掃描最後一次交換的位置,下次掃描的時候只要掃描到上次的最後交換位置就行,同代碼2,代碼如下:
二、快速排序
演算法介紹:
快速排序是對冒泡排序的一種改進,第一趟排序時將數據分成兩部分,一部分比另一部分的所有數據都要小。然後遞歸調用,在兩邊都實行快速排序。
三、選擇排序
演算法介紹:
選擇排序就是從一個未知數據空間里,選取之最放到一個新的空間
四、插入排序
演算法介紹:
·___擁諞桓瞿媳慌藕眯虻腦乜
·___〕魷亂桓鱸兀諞丫判虻腦匭蛄兄寫雍笙蚯吧_
·___綣雅判虻腦卮笥諶〕齙腦兀蚪浞直鶼蚝笠貧晃
·___鋇秸業揭雅判虻腦刂行∮諢虻扔諶〕齙腦兀〕齙腦胤諾剿暮笠晃
·___馗床街2
插入排序演算法改進-二分法插入排序:
以上就是小編今天為大家分享的JavaScript中常用的排序演算法的文章,文章中介紹的是四種比較基礎的排序方法,JavaScript的排序演算法還有很多,這是我們4種最常見也是最基本的演算法,掌握理解好,在面試和開發中也能從容應對了。想要了解更多Web前端知識記得關注北大青鳥Web培訓官網哦。最後祝願小夥伴們工作順利!
本文轉自前端研究所。
*聲明:內容與圖片均來源於網路(部分內容有修改),版權歸原作者所有,如來源信息有誤或侵犯權益,請聯系我們刪除或授權事宜。
⑺ 有什麼前端學習方法
學習前端最有效的方法是持之以恆的堅持。
無論做什麼,先別想那麼多先做了再說,因為人都是懶惰,什麼事情最先想到的都是走捷徑,深怕付出了沒有回報。學習這個事情,從小學老師就說,一定要好好學習天天向上,去總結了真的努力了,到頭來除了抱怨還抱怨,總期望天上掉餡餅。方法有很多種,真的適合的才是真的有用,什麼樣的方法才適合自己,無論什麼方法你得做了才有效!所以沒有最有效的方法,只有持之以恆的堅持才是真正有效的。
作為一個初學者,你必須明確系統的學習方案,我建議一定有一個指導的人,全靠自己學,放棄的幾率非常大,在你對於web前端還沒有任何概念的時候,需要一個人領進門,之後就都靠自己鑽研,第一步就是確定web前端都需要哪些內容,並且在多少時間內學完,建議時間6個月保底。
視頻為主,書為輔。很多初學者在學習前端的時候非常喜歡去買書,但是最後的結果是什麼?看來看去什麼都不會寫,所以在這里給大家提醒,書可以看,但是是在建立於你已經對於某個知識點有了具體操作的執行後,在用書去鞏固概念,這樣更加利於你對於知識的理解。
對於學習技術來講,掌握一個學習方法是非常重要的,其實對於學習web前端來講,學習方法確實很多都是相通的,一旦學習方法不對,可能就會造成「方法不對,努力白費」。其實關於這方面還是很多的,我就簡單說個例子,有的人邊聽課邊跟著敲代碼,這樣就不對,聽課的時候就專心聽,做題的時候就專心做題,這都是過來人的經驗,一定要聽。根據每個人的不同,可能學習方法也會有所出路,找到適合你自己的學習法方法是學習的前提。
不建議自己一個人瞎學,在我了解學習編程的這些人來看,從零基礎開始學並且最後成功做這份工作的其實並沒有幾個,我覺得大部分原因就是因為他們都不了解web前端是干什麼的,學什麼的,就盲目的買書看,到處找視頻看,最後看著看著就放棄了,所以我建議初學者在沒有具體概念之前,還是找有經驗的人請教一下,聊過之後你就會知道web前端具體是干什麼的,該怎麼學,這是我個人的小建議,可以不採納。
自學路線:
第1階段:前端頁面重構(4周)
內容包含了:(PC端網站布局項目、HTML5+CSS3基礎項目、WebApp頁面布局項目)
第2階段:JavaScript高級程序設計(5周)
內容包含:(原生JavaScript交互功能開發項目、面向對象進階與ES5/ES6應用項目、JavaScript工具庫自主研發項目)
第3階段:PC端全棧項目開發(3周)
內容包含:(jQuery經典交互特效開發、HTTP協議、Ajax進階與PHP/JAVA開發項目、前端工程化與模塊化應用項目、PC端網站開發項目、PC端管理信息系統前端開發項目)
第4階段:移動端項目開發(6周)
內容包含:(Touch端項目、微信場景項目、應用Angular+Ionic開發WebApp項目、應用Vue.js開發WebApp項目、應用React.js開發WebApp項目)
第5階段:混合(Hybrid,ReactNative)開發(1周)
內容包含:(微信小程序開發、ReactNative、各類混合應用開發)
第6階段:NodeJS全棧開發(1周)
內容包括:(WebApp後端系統開發、一、NodeJS基礎與NodeJS核心模塊二、Express三、noSQL資料庫)。
網上有很多免費的web前端視頻教程,可以跟著學學,給你推薦一套視頻教程:網頁鏈接。
⑻ 前端演算法入門一:刷演算法題常用的JS基礎掃盲
此篇屬於前端演算法入門系列的第一篇,主要介紹常用的 數組方法 、 字元串方法 、 遍歷方法 、 高階函數 、 正則表達式 以及相關 數學知識 。
在尾部追加,類似於壓棧,原數組會變。
在尾部彈出,類似於出棧,原數組會變。數組的 push & pop 可以模擬常見數據結構之一:棧。
在頭部壓入數據,類似於入隊,原數組會變。
在頭部彈出數據,原數組會變。數組的 push(入隊) & shift(出隊) 可以模擬常見數據結構之一:隊列。
concat會在當前數組尾部拼接傳入的數組,然後返回一個新數組,原數組不變。
在數組中尋找該值,找到則返回其下標,找不到則返回-1。
在數組中尋找該值,找到則返回true,找不到則返回false。
將數組轉化成字元串,並返回該字元串,不傳值則默認逗號隔開,原數組不變。
翻轉原數組,並返回已完成翻轉的數組,原數組改變。
從start 開始截取到end,但是不包括end
可參考 MDN:Sort
將數組轉化成字元串,並返回該字元串,逗號隔開,原數組不變。
返回指定索引位置處的字元。類似於數組用中括弧獲取相應下標位置的數據。
類似數組的concat(),用來返回一個合並拼接兩個或兩個以上字元串。原字元串不變。
indexOf,返回一個字元在字元串中首次出現的位置,lastIndexOf返回一個字元在字元串中最後一次出現的位置。
提取字元串的片斷,並把提取的字元串作為新的字元串返回出來。原字元串不變。
使用指定的分隔符將一個字元串拆分為多個子字元串數組並返回,原字元串不變。
match()方法可在字元串內檢索指定的值,或找到一個或多個正則表達式的匹配,並返回一個包含該搜索結果的數組。
注意事項 :如果match方法沒有找到匹配,將返回null。如果找到匹配,則 match方法會把匹配到以數組形式返回,如果正則規則未設置全局修飾符g,則 match方法返回的數組有兩個特性:input和index。input屬性包含整個被搜索的字元串。index屬性包含了在整個被搜索字元串中匹配的子字元串的位置。
replace接收兩個參數,參數一是需要替換掉的字元或者一個正則的匹配規則,參數二,需要替換進去的字元,仔實際的原理當中,參數二,你可以換成一個回調函數。
在目標字元串中搜索與正則規則相匹配的字元,搜索到,則返回第一個匹配項在目標字元串當中的位置,沒有搜索到則返回一個-1。
toLowerCase把字母轉換成小寫,toUpperCase()則是把字母轉換成大寫。
includes、startsWith、endsWith,es6的新增方法,includes 用來檢測目標字元串對象是否包含某個字元,返回一個布爾值,startsWith用來檢測當前字元是否是目標字元串的起始部分,相對的endwith是用來檢測是否是目標字元串的結尾部分。
返回一個新的字元串對象,新字元串等於重復了指定次數的原始字元串。接收一個參數,就是指定重復的次數。原字元串不變。
最常用的for循環,經常用的數組遍歷,也可以遍歷字元串。
while、do while主要的功能是,當滿足while後邊所跟的條件時,來執行相關業務。這兩個的區別是,while會先判斷是否滿足條件,然後再去執行花括弧裡面的任務,而do while則是先執行一次花括弧中的任務,再去執行while條件,判斷下次還是否再去執行do裡面的操作。也就是說 do while至少會執行一次操作 .
拷貝一份遍歷原數組。
for…of是ES6新增的方法,但是for…of不能去遍歷普通的對象, for…of的好處是可以使用break跳出循環。
面試官:說一下 for...in 和 for...of 區別?
返回一個布爾值 。當我們需要判定數組中的元素是否滿足某些條件時,可以使用every / some。這兩個的區別是,every會去判斷判斷數組中的每一項,而 some則是當某一項滿足條件時返回。
rece 從左到右將數組元素做「疊加」處理,返回一個值。receRight 從右到左。
Object.keys方法的參數是一個對象,返回一個數組。該數組的成員都是該對象自身的(而不是繼承的)所有屬性名,且只返回可枚舉的屬性。
Object.getOwnPropertyNames方法與Object.keys類似,也是接受一個對象作為參數,返回一個數組,包含了該對象自身的所有屬性名。但它能返回不可枚舉的屬性。
這里羅列一些我在刷演算法題中遇到的正則表達式,如果有時間可認真學一下正則表達式不要背。
持續更新,敬請期待……
若一個正整數無法被除了1 和它自身之外的任何自然數整除,則稱該數為質數(或素數),否則稱該正整數為合數。
持續更新,敬請期待……
作者:擺草猿
鏈接:https://juejin.cn/post/7087134135193436197
⑼ web前端javascript能實現什麼演算法或者計算
在Web開發中,JavaScript很重要,演算法也很重要。下面整理了一下一些常見的演算法在JavaScript下的實現,包括二分法、求字元串長度、數組去重、插入排序、選擇排序、希爾排序、快速排序、冒泡法等等。僅僅是為了練手,不保證高效與美觀,或許還有Bug,有時間再完善吧。
1.二分法:
function binary(items,value){
var startIndex=0,
stopIndex=items.length-1,
midlleIndex=(startIndex+stopIndex)>>>1;
while(items[middleIndex]!=value && startIndex
if(items[middleIndex]>value){
stopIndex=middleIndex-1;
}else{
startIndex=middleIndex+1;
}
middleIndex=(startIndex+stopIndex)>>>1;
}
return items[middleIndex]!=value ? false:true;
}
2.十六進制顏色值的隨機生成:
function randomColor(){
var arrHex=["0","2","3","4","5","6","7","8","9","a","b","c","d"],
strHex="#",
index;
for(var i=0;i < 6; i++){
index=Math.round(Math.random()*15);
strHex+=arrHex[index];
}
return strHex;
}
一個求字元串長度的方法:
function GetBytes(str){
var len=str.length,
bytes=len;
for(var i=0;i < len;i++){
if(str.CharCodeAt>255){
bytes++;
}
}
return bytes;
}
3.js實現數組去重:
Array.protype.delRepeat=function(){
var newArray=new Array();
var len=this.length;
for(var i=0;i < len;i++){
for(var j=i+1;j < len;j++)
{
if(this[i]==this[j])
{
++i;
}
}
newArray.push(this[i]);
}
return newArray;
}
4.插入排序。所謂的插入排序,就是將序列中的第一個元素看成一個有序的子序列,然後不段向後比較交換比較交換。
function insertSort(arr){
var key;
for(var j = 1; j < arr.length ; j++){
//排好序的
var i = j - 1;
key = arr[j];
while(i >= 0 && arr[i] > key){
arr[i + 1] = arr[i];
i --;
}
arr[i + 1] = key;
}
return arr;
}
5.選擇排序。其實基本的思想就是從待排序的數組中選擇最小或者最大的,放在起始位置,然後從剩下的數組中選擇最小或者最大的排在這公司數的後面。
function selectionSort(data)
{
var i, j, min, temp , count=data.length;
for(i = 0; i < count - 1; i++) {
/* find the minimum */
min = i;
for (j = i+1; j < count; j++)
{
if (data[j] < data[min])
{ min = j;}
}
/* swap data[i] and data[min] */
temp = data[i];
data[i] = data[min];
data[min] = temp;
}
return data;
}
6.希爾排序,也稱遞減增量排序演算法。其實說到底也是插入排序的變種。
function shellSort(array){
var stepArr = [1750, 701, 301, 132, 57, 23, 10, 4, 1]; //
reverse()在維基上看到這個最優的步長較小數組
var i = 0;
var stepArrLength = stepArr.length;
var len = array.length;
var len2 = parseInt(len/2);
for(;i < stepArrLength; i++){
if(stepArr[i] > len2){
continue;
}
stepSort(stepArr[i]);
}
// 排序一個步長
function stepSort(step){
//console.log(step) 使用的步長統計
var i = 0, j = 0, f, tem, key;
var stepLen = len%step > 0 ? parseInt(len/step) + 1 : len/step;
for(;i < step; i++){// 依次循環列
for(j=1;/*j < stepLen && */step * j + i < len;
j++){//依次循環每列的每行
tem = f = step * j + i;
key = array[f];
while((tem-=step) >= 0){// 依次向上查找
if(array[tem] > key){
array[tem+step] = array[tem];
}else{
break;
}
}
array[tem + step ] = key;
}
}
}
return array;
}
7.快速排序。其實說到底快速排序演算法就系對冒泡排序的一種改進,採用的就是演算法理論中的分治遞歸的思想,說得明白點,它的做法就是:通過一趟排序將待排序的紀錄分割成兩部分,其中一部分的紀錄值比另外一部分的紀錄值要小,就可以繼續分別對這兩部分紀錄進行排序;不段的遞歸實施上面兩個操作,從而實現紀錄值的排序。
function quickSort(arr,l,r){
if(l < r){
var mid=arr[parseInt((l+r)/2)],i=l-1,j=r+1;
while(true){
while(arr[++i] < mid);
while(arr[--j]>mid);
if(i>=j)break;
var temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
quickSort(arr,l,i-1);
quickSort(arr,j+1,r);
}
return arr;
}
8.冒泡法:
function bullSort(array){
var temp;
for(var i=0;i < array.length;i++)
{
for(var j=array.length-1;j > i;j--){
if(array[j] < array[j-1])
{
temp = array[j];
array[j]=array[j-1];
array[j-1]=temp;
}
}
}
return array;
}
⑽ 學習web前端,需要掌握哪些知識點以怎樣的學習順序
第一階段:
HTML CSS:HTML進階、CSS進階、div css布局、HTML css整站開發。
JavaScript基礎:Js基礎教程、js內置對象常用方法、常見DOM樹操作大全、ECMAscript、DOM、BOM、定時器和焦點圖。
JS基本特效:常見特效、例如:tab、導航、整頁滾動、輪播圖、JS製作幻燈片、彈出層、手風琴菜單、瀑布流布局、滾動事件、滾差視圖。
JS高級特徵:正則表達式、排序演算法、遞歸演算法、閉包、函數節流、作用域鏈、基於距離運動框架、面向對象基礎。
JQuery:基礎使用懸著器、DOM操作、特效和動畫、方法鏈、拖拽、變形、JQueryUI組件基本使用。
第二階段:
HTML5和移動Web開發
HTML5:HTML5新語義標簽、HTML5表單、音頻和視頻、離線和本地存儲、SVG、Web Socket、Canvas。
CSS3:CSS3新選擇器、偽元素、臉色表示法、邊框、陰影、background系列屬性改變、Transition、動畫、景深和深透、3D效果製作、Velocity.js框架、元素進場、出場策略、炫酷CSS3網頁製作。
Bootstrap:響應式概念、媒體查詢、響應式網站製作、刪格系統、刪格系統原理、Bootstrap常用模板、LESS和SASS。
移動Web開發:跨終端WEB和主流設備簡介、視口、流式布局、彈性盒子、rem、移動終端JavaScript事件、手機中常見JS效果製作、Zepto.js、手機聚劃算頁面、手機滾屏。
第三階段:
HTTP服務和AJAX編程
WEB伺服器基礎:伺服器基礎知識、Apache伺服器和其他WEB伺服器介紹、Apache伺服器搭建、HTTP介紹。
PHP基礎:PHP基礎語法、使用PHP處理簡單的GET或者POST請求。
AJAX上篇:Ajax簡介和非同步的概念、Ajax框架的封裝、XMLHttpRequest對象詳細介紹方法、兼容性處理方法、Ajax框架的封裝、Ajax中緩存問題、XML介紹和使用。
AJAX下篇:JSON和JSON解析、數據綁定和模板技術、JSONP、跨域技術、圖片預讀取和lazy-load技術、JQuery框架中的AjaxAPI、使用Ajax實現爆布流案例額。
第四階段:
面向對象進階
面向對象終極篇:從內存角度到理解JS面向對象、基本類型、復雜類型、原型鏈、ES6中的面向對象、屬性讀寫許可權、設置器、訪問器。
面向對象三大特徵:繼承性、多態性、封裝性、介面。
設計模式:面向對象編程思維、單例模式、工廠模式、策略模式、觀察者模式、模板方法模式、代理模式、裝飾者模式、適配器模式、面向切面編程。
第五階段:
封裝一個屬於自己的框架
框架封裝基礎:事件流、冒泡、捕獲、事件對象、事件框架、選擇框架。
框架封裝中級:運動原理、單物體運動框架、多物體運動框架、運動框架面向對象封裝。
框架封裝高級和補充:JQuery框架雛形、可擴展性、模塊化、封裝屬於傳智自己的框架。
第六階段:
模塊化組件開發
面向組件編程:面向組件編程的方式、面向組件編程的實現原理、面向組件編程實戰、基於組件化思想開發網站應用程序。
面向模塊編程:AMD設計規范、CMD設計規范、RequireJS,LoadJS、淘寶的SeaJS。
第七階段:
主流的流行框架
Web開發工作流:GIT/SVN、Yeoman腳手架、NPMer依賴管理工具、Grunt/Gulp/Webpack。
MVC/MVVM/MVW框架:Angular.js、Backbone.js、Knockout/Ember。
常用庫:React.js、Vue.js、Zepto.js。
第八階段:
HTML5原生移動應用開發
Cordova:WebApp/NativeApp/HybirdApp簡介、Cordova簡介、與PhoneGap之間的關系、開發環境搭建、Cordova實戰(創建項目,配置,編譯,調試,部署發布)。
Ionic:Ionic簡介和同類對比、模板項目解析、常見組件及使用、結合Angular構建APP、常見效果(下拉刷新,上拉載入,側滑導航,選項卡)。
React Native:React Native簡介、React Native環境配置、創建項目,配置,編譯,調試,部署發布、原生模塊和UI組件、原生常用API。
HTML5 :HTML5 中國產業聯盟、HTML5 Plus Runtime環境、HBuilder開發工具、MUI框架、H5 開發和部署。
第九階段:
Node.js全棧開發
快速入門:Node.js發展、生態圈、Io.js、Linux/Windows/OS X環境配置、REPL環境和控制台程序、非同步編程,非阻塞I/O、模塊概念,模塊管理工具、開發流程,調試,測試。
核心模塊和對象:全局對象global,process,console,util、事件驅動,事件發射器、加密解密,路徑操做。
祝你學有所成!
如果你對於學習前端有任何不懂的可以隨時來問我,我給你提供一個非常不錯的前端交流學習qun:前面是一一四,中間是一八八,後面是四九三一。有問題就在裡面問我,這樣你可以少走很多彎路,做起來有效率,記得多跟有經驗的人交流,別閉門造車。如果沒有比較好的教程,也可以管我要。