<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

        JavaScript開發(fā)規(guī)范要求(圖文并茂)_javascript技巧

        來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 20:49:51
        文檔

        JavaScript開發(fā)規(guī)范要求(圖文并茂)_javascript技巧

        JavaScript開發(fā)規(guī)范要求(圖文并茂)_javascript技巧:本人在開發(fā)工作中就曾與不按規(guī)范來開發(fā)的同事合作過,與他合作就不能用愉快來形容了。現(xiàn)在本人撰寫此文的目的除了與大家分享一點(diǎn)點(diǎn)經(jīng)驗(yàn)外,更多的是希望對未來的合作伙伴能夠起到一定的借鑒作用。當(dāng)然,如果我說的有不科學(xué)的地方還希望各路前輩多多指教。
        推薦度:
        導(dǎo)讀JavaScript開發(fā)規(guī)范要求(圖文并茂)_javascript技巧:本人在開發(fā)工作中就曾與不按規(guī)范來開發(fā)的同事合作過,與他合作就不能用愉快來形容了。現(xiàn)在本人撰寫此文的目的除了與大家分享一點(diǎn)點(diǎn)經(jīng)驗(yàn)外,更多的是希望對未來的合作伙伴能夠起到一定的借鑒作用。當(dāng)然,如果我說的有不科學(xué)的地方還希望各路前輩多多指教。

        本人在開發(fā)工作中就曾與不按規(guī)范來開發(fā)的同事合作過,與他合作就不能用“愉快”來形容了。現(xiàn)在本人撰寫此文的目的除了與大家分享一點(diǎn)點(diǎn)經(jīng)驗(yàn)外,更多的是希望對未來的合作伙伴能夠起到一定的借鑒作用。當(dāng)然,如果我說的有不科學(xué)的地方還希望各路前輩多多指教。下面分條目列出各種規(guī)范要求,這些要求都是針對同事編碼毛病提出來的,好些行業(yè)約定的其它規(guī)范可能不會(huì)再提及。 1、保證代碼壓縮后不出錯(cuò)

        對于大型的JavaScript項(xiàng)目,一般會(huì)在產(chǎn)品發(fā)布時(shí)對項(xiàng)目包含的所有JavaScript文件進(jìn)行壓縮處理,比如可以利用Google Closure Compiler Service對代碼進(jìn)行壓縮,新版jQuery已改用這一工具對代碼進(jìn)行壓縮,這一般會(huì)去掉開發(fā)時(shí)寫的注釋,除去所有空格和換行,甚至可以把原來較長的變量名替換成短且無意義的變量名,這樣做的目的是加快文件的下載速度,同時(shí)也減小網(wǎng)站訪問帶來的額外數(shù)據(jù)流量,另外在代碼保護(hù)上也起到了一點(diǎn)點(diǎn)作用,至少壓縮后的代碼即使被還原還是沒那么容易一下讀懂的。要想代碼能正確通過壓縮,一般要求語句都要以分號正常結(jié)束,大括號也要嚴(yán)格結(jié)束等,具體還要看壓縮工具的要求。所以如果一開始沒有按標(biāo)準(zhǔn)來做,等壓縮出錯(cuò)后再回去找錯(cuò)誤那是浪費(fèi)時(shí)間。

        2、保證代碼能通過特定IDE的自動(dòng)格式化功能

        一般較為完善的開發(fā)工具(比如Aptana Studio)都有代碼“自動(dòng)格式”化功能,這一功能幫助實(shí)現(xiàn)統(tǒng)一換行、縮進(jìn)、空格等代碼編排,你可以設(shè)置自己喜歡的格式標(biāo)準(zhǔn),比如左大括號{是否另起一行。達(dá)到這個(gè)要求的目的在于方便你的開發(fā)團(tuán)隊(duì)成員拿你代碼的一個(gè)副本用IDE自動(dòng)格式化成他喜歡或熟悉的風(fēng)格進(jìn)行閱讀。你同事需要閱讀你的代碼,可能是因?yàn)槟銓懙氖峭ㄓ梅椒ǎ谄渌K開發(fā)過程中也要使用到,閱讀你的代碼能最深入了解方法調(diào)用和實(shí)現(xiàn)的細(xì)節(jié),這是簡單API文檔不能達(dá)到的效果。

        3、使用標(biāo)準(zhǔn)的文檔注釋

        這一要求算是最基本的,這有利于在方法調(diào)用處看到方法的具體傳參提示,也可以利用配套文檔工具生成html或其它格式的開發(fā)文檔供其他團(tuán)隊(duì)成員閱讀,你可以嘗試使用jsdoc-toolkit。如果你自動(dòng)生成的API是出自一個(gè)開放平臺,就像facebook.com應(yīng)用,那么你的文檔是給天下所有開發(fā)者看的。另外編寫完整注釋,也更方便團(tuán)隊(duì)成員閱讀你的代碼,通過你的參數(shù)描述,團(tuán)隊(duì)成員可以很容易知道你編寫的方法傳參與實(shí)現(xiàn)細(xì)節(jié)。當(dāng)然也方便日后代碼維護(hù),這樣即使再大的項(xiàng)目,過了很長時(shí)間后,回去改點(diǎn)東西也就不至于自己都忘記了當(dāng)時(shí)自己寫的代碼是怎么一回事了。

        4、使用規(guī)范有意義的變量名

        使用規(guī)范有意義的變量名可以提高代碼的可讀性,作為大項(xiàng)目開發(fā)成員,自己寫的代碼不僅僅要讓別人容易看懂。開發(fā)大項(xiàng)目,其實(shí)每個(gè)人寫的代碼量可能都比較大,規(guī)范命名,日后自己看回自己的代碼也顯的清晰易懂,比如日后系統(tǒng)升級或新增功能,修改起代碼來也輕松多了。如果到頭發(fā)現(xiàn)自己當(dāng)初寫的代碼現(xiàn)在看不太懂了,那還真是天大的笑話了。

        當(dāng)然,使用有意義的變量名也盡量使用標(biāo)準(zhǔn)的命名,比如像這里:var me = this也許沒有var self = this好,因?yàn)閟elf是Python中的關(guān)鍵字,在Python中self就是通常語言this的用法。再看下面一個(gè)例子,加s顯然比沒有加來的科學(xué)些,這樣可以知道這個(gè)變量名存的是復(fù)數(shù),可能是數(shù)組等:

        var li = document.getElementsByTagName('li')
        var lis = document.getElementsByTagName('li')

        5、不使用生偏語法

        JavaScript作為一門動(dòng)態(tài)腳本語言,靈活性既是優(yōu)點(diǎn)也是缺點(diǎn),眾所周知,動(dòng)態(tài)語言不同層次開發(fā)人員對實(shí)現(xiàn)同樣一個(gè)功能寫出來的代碼在規(guī)范或語法上會(huì)存在較大的差別。不管怎么樣,規(guī)范編碼少搞怪,不把簡單問題復(fù)雜化,不違反代碼易讀性原則才是大家應(yīng)該做的。

        比如這語句:typeof(b) == 'string' && alert(b)應(yīng)該改為:if (typeof(b) == 'string') alert(b),像前面那種用法,利用了&&運(yùn)算符解析機(jī)制:如果檢測到&&前語句返回false就不再檢測后面語句,在代碼優(yōu)化方面也有提到把最可能出現(xiàn)的情況首先判斷,像這種寫法如果條件少還好,如果條件較多而且語句也長,那代碼可讀性就相當(dāng)差。

        又比如:+function(a){var p = a;}( 'a')應(yīng)該改為:(function(a){var p = a;})( 'a'),其實(shí)function前面的+號與包含function的()括號作用是一樣的,都是起運(yùn)算優(yōu)先作用,后者是常見且容易看明白的防止變量污染的做法,比如好些流行JavaScript框架就是采用后面這種方式。

        再說個(gè)降低代碼可讀性的例子,如:function getPostionTxt(type){return type == 2 ? "野外" : (type == 3 ? "商城" : (type == 4 ? "副本" : null));}應(yīng)該改成:function getPostionTxt(type){var typeData={"2":"野外","3":"商城","4":"副本"};if (typeData[type]) return typeData[type]; else return null;}。如果type是從0開始不間斷的整數(shù),那么直接使用數(shù)組還更簡單,這種結(jié)果看起來就清晰多了,看到前面那種多層三元表達(dá)式嵌套頭不暈嗎。

        6、不在語句非賦值地方出生中文

        語句中不應(yīng)該出現(xiàn)中文我想一般人都知道,雖然這樣做不影響程序運(yùn)行,但是顯然有背行業(yè)標(biāo)準(zhǔn)要求,當(dāng)然我們也不是在使用“易語言”做開發(fā)。關(guān)于這一個(gè)問題,我本來不想把它拿出來說的,但我確實(shí)遇到有人這樣做的,也不知道是不是因?yàn)樗挠⒄Z實(shí)在太爛了,至少還可以用拼音吧,另外尋求翻譯工具幫忙也不錯(cuò)的選擇。我舉例如下,像以下寫法出現(xiàn)在教學(xué)中倒還可以理解:

        this.user['名字'] = '張三' 或者 this.user.名字 = '張三'

        7、明確定義函數(shù)固定數(shù)量的參數(shù)

        固定數(shù)量參數(shù)的函數(shù)內(nèi)部不使用arguments去獲取參數(shù),因?yàn)檫@樣,你定義的方法如果包含較多的腳本,就不能一眼看到這個(gè)方法接受些什么參數(shù)以及參數(shù)的個(gè)數(shù)是多少。比如像下面:
        var $ = function(){return document.getElementById(arguments[0]);}應(yīng)該改成:var $ = function(elemID){return document.getElementById(elemID);}

        8、不必?zé)嶂詣?dòng)態(tài)事件綁定

        雖然知道事件可以動(dòng)態(tài)綁定,比如使用addEventListener或者使用jQuery的bind方法,也知道采用動(dòng)態(tài)事件綁定可以讓XHTML更干凈,但是一般情況下我還是建議直接把事件寫在DOM節(jié)點(diǎn)上,我認(rèn)為這樣可以使代碼變得更容易維護(hù),因?yàn)檫@樣做,我們在查看源代碼的時(shí)候就可以容易地知道什么Element綁定了什么方法,簡單說這樣更容易知道一個(gè)按鈕或鏈接點(diǎn)擊時(shí)調(diào)了什么方法腳本。

        9、降低代碼與XHTML的耦合性

        不要過于依賴DOM的一些內(nèi)容特征來調(diào)用不同的腳本代碼,而應(yīng)該定義不同功能的方法,然后在DOM上調(diào)用,這樣不管DOM是按鈕還是鏈接,方法的調(diào)用都是一樣的,比如像下面的實(shí)現(xiàn)顯然會(huì)存在問題:

        function myBtnClick(obj)
        {
         if (/確定/.test(obj.innerHTML))
          alert('OK');
         else if (/取消/.test(obj.innerHTML))
          alert('Cancel');
         else
          alert('Other');
        }

        確定取消

        上面例子其實(shí)在一個(gè)函數(shù)內(nèi)處理了兩件事情,應(yīng)該分成兩個(gè)函數(shù),像上面的寫法,如果把鏈接換成按鈕,比如改成這樣:,那么myBtnClick函數(shù)內(nèi)部的obj.innerHTML就出問題了,因?yàn)榇藭r(shí)應(yīng)該obj.value才對,另外如果把按鈕名稱由中文改為英文也會(huì)出問題,所以這種做法問題太多了。

        10、一個(gè)函數(shù)應(yīng)該返回統(tǒng)一的數(shù)據(jù)類型

        因?yàn)镴avaScrip是弱類型的,在編寫函數(shù)的時(shí)候有些人對于返回類型的處理顯得比較隨便,我覺得應(yīng)該像強(qiáng)類型語言那樣返回,看看下面的兩個(gè)例子:

        function getUserName(userID)
        {
         if (data[userID])
          return data[userID];
         else
          return false;
        }

        應(yīng)該改為:

        function getUserName(userID)
        {
         if (data[userID])
          return data[userID];
         else
          return "";
        }

        這個(gè)方法如果在C#中定義,我們知道它準(zhǔn)備返回的數(shù)據(jù)類型應(yīng)該是字符串,所以如果沒有找到這個(gè)數(shù)據(jù)我們就應(yīng)該返回空的字符串,而不是返回布爾值或其它不合適的類型。這并沒有影響到函數(shù)將來的調(diào)用,因?yàn)榉祷氐目兆址谶壿嬇袛嗌峡杀徽J(rèn)作“非”,即與false一樣,除非我們使用全等于“===”或typeof進(jìn)行判斷。

        11、規(guī)范定義JSON對象,補(bǔ)全雙引號

        使用標(biāo)準(zhǔn)肯定是有好處的,那么為什么還是有人不使用標(biāo)準(zhǔn)呢?我想這可能是懶或習(xí)慣問題。也許還會(huì)有人跟我說,少寫引號可以減輕文件體積,我認(rèn)為這有道理但不是重點(diǎn)。對于服務(wù)器返回的JSON數(shù)據(jù),使用標(biāo)準(zhǔn)結(jié)構(gòu)可以利用Firefox瀏覽器的JSONView插件方便查看(像查看XML那樣樹形顯示),另外你如果使用jQuery做開發(fā),最新版本jQuery1.4+是對JSON格式有更高要求的,具體的可以自己查閱jQuery更新文檔。比如:{name:"Tom"}或{'name':'Tom'}都應(yīng)該改成{"name":"Tom"}。

        12、不在文件中留下未來確定不再使用的代碼片段

        當(dāng)代碼調(diào)整或重構(gòu)后,之前編寫的不再使用的代碼應(yīng)該及時(shí)刪除,如果認(rèn)為這些代碼還有一定利用價(jià)值可以把它們剪切到臨時(shí)文件中。留在項(xiàng)目中不僅增加了文件體積,這對團(tuán)隊(duì)其它成員甚至自己都起到一定干擾作用,怕將來自己看回代碼都搞不懂這方法是干什么的,是否有使用過。當(dāng)然可以用文檔注釋標(biāo)簽@deprecated把這個(gè)方法標(biāo)識為不推薦的。

        13、不重復(fù)定義其他團(tuán)隊(duì)成員已經(jīng)實(shí)現(xiàn)的方法

        對于大型項(xiàng)目,一般會(huì)有部分開發(fā)成員實(shí)現(xiàn)一些通用方法,而另外一些開發(fā)成員則要去熟悉這些通用方法,然后在自己編寫模塊遇到有調(diào)用的需要就直接調(diào)用,而不是像有些開發(fā)者喜歡“單干”,根本不會(huì)閱讀這些通用方法文檔,在自己代碼中又寫了一遍實(shí)現(xiàn),這不僅產(chǎn)生多余的代碼量,當(dāng)然也是會(huì)影響團(tuán)隊(duì)開發(fā)效率的,這是沒有團(tuán)隊(duì)合作精神的表現(xiàn),是重復(fù)造輪子的悲劇。

        比如在通用類文件Common.js有定義function $(elemID){return document.getElementById(elemID)}那么就不應(yīng)該在Mail.js中再次出現(xiàn)這一功能函數(shù)的重復(fù)定義,對于一些復(fù)雜的方法更應(yīng)該如此。

        14、調(diào)用合適的方法

        當(dāng)有幾個(gè)方法都可以實(shí)現(xiàn)同類功能的時(shí)候,我們還是要根據(jù)場景選擇使用最合適的方法。下面拿jQuery框架的兩個(gè)AJAX方法來說明。如果確定服務(wù)器返回的數(shù)據(jù)是JSON應(yīng)該直接使用$.getJSON,而不是使用$.get得到數(shù)據(jù)再用eval函數(shù)轉(zhuǎn)成JSON對象。如果因?yàn)楸敬握埱笠獋鬏敶罅康臄?shù)據(jù)而不得以使用$.post也應(yīng)該采用指定返回?cái)?shù)據(jù)類型(設(shè)置dataType參數(shù))的做法。如果使用$.getJSON,在代碼中我們一眼能看出本次請求服務(wù)器返回的是JSON。

        溫馨提示:jQuery1.4后,如果服務(wù)器有設(shè)置數(shù)據(jù)輸出的ContentType,比如ASP.NET C#設(shè)置 Response.ContentType = "application/json",那么$.get將與$.getJSON的使用沒有什么區(qū)別。

        15、使用合適的控件存儲合適的數(shù)據(jù)

        曾發(fā)現(xiàn)有人利用DIV來保存JSON數(shù)據(jù),以待頁面下載后將來使用,像這樣:{ "name":"Tom"},顯然這個(gè)DIV不是用來界面顯示的,如果非要這樣做,達(dá)到使用HTML文件進(jìn)行數(shù)據(jù)緩存的作用,至少改成用隱藏域來存這數(shù)據(jù)更合理,比如改成:

        其實(shí)也可以利用window對象來保存一些數(shù)據(jù),像上面的例子,我們可以在AJAX請求頁直接包含這樣的腳本塊:

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        JavaScript開發(fā)規(guī)范要求(圖文并茂)_javascript技巧

        JavaScript開發(fā)規(guī)范要求(圖文并茂)_javascript技巧:本人在開發(fā)工作中就曾與不按規(guī)范來開發(fā)的同事合作過,與他合作就不能用愉快來形容了。現(xiàn)在本人撰寫此文的目的除了與大家分享一點(diǎn)點(diǎn)經(jīng)驗(yàn)外,更多的是希望對未來的合作伙伴能夠起到一定的借鑒作用。當(dāng)然,如果我說的有不科學(xué)的地方還希望各路前輩多多指教。
        推薦度:
        標(biāo)簽: 開發(fā) js 規(guī)范
        • 熱門焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 日韩a级毛片免费视频| 女人张开腿给人桶免费视频| 亚洲精品线路一在线观看| 亚洲一线产区二线产区区| 99在线视频免费观看视频 | 最近中文字幕大全中文字幕免费| 国产亚洲福利精品一区| 色www永久免费| 久久久久亚洲av无码专区蜜芽 | 91精品免费国产高清在线| 亚洲精品在线视频观看| 国产精品永久免费10000| 亚洲偷自拍另类图片二区| 国产自产拍精品视频免费看| 深夜a级毛片免费视频| 亚洲精品国偷自产在线| 久久免费观看国产精品88av| 亚洲熟妇无码爱v在线观看| 成人午夜免费福利视频| 国产成人亚洲综合在线| 中文字幕亚洲日本岛国片| 毛片免费在线观看| 亚洲制服丝袜一区二区三区| 无码国模国产在线观看免费| a级毛片视频免费观看| 亚洲码在线中文在线观看| 国内外成人免费视频| 2022免费国产精品福利在线| 亚洲av无码成人黄网站在线观看| 国产99视频精品免费观看7| 国产精品亚洲一区二区三区在线观看 | 亚洲爆乳无码专区| 欧亚精品一区三区免费| 日韩一区二区三区免费播放| 亚洲A∨无码一区二区三区| 成人黄动漫画免费网站视频 | 男人扒开添女人下部免费视频| 国产亚洲成av片在线观看 | 最近免费中文字幕大全| 一个人免费播放在线视频看片| 日韩亚洲Av人人夜夜澡人人爽|