最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何寫好你的JavaScript【推薦】

 更新時(shí)間:2017年03月02日 11:38:29   作者:勞卜  
在實(shí)際工作中,我們應(yīng)該經(jīng)常會看到一些功能上沒有問題,但編碼風(fēng)格和規(guī)范卻十分糟糕的代碼,這往往會讓人不敢再往下閱讀,甚至?xí)绊戦喿x者一天的心情。本文的目的在于幫助那些沒有養(yǎng)成良好的編碼風(fēng)格,缺乏相應(yīng)編碼規(guī)范意識的JavaScript學(xué)習(xí)者們改善他們的編碼形象。

前言

在實(shí)際工作中,我們應(yīng)該經(jīng)常會看到一些功能上沒有問題,但編碼風(fēng)格和規(guī)范卻十分糟糕的代碼,這往往會讓人不敢再往下閱讀,甚至?xí)绊戦喿x者一天的心情。這些代碼不僅不易閱讀,而且難以維護(hù),它們一般會出自剛?cè)腴T的編程新手,也會出自工作了好幾年的老程序員手下。因此本文的目的在于幫助那些沒有養(yǎng)成良好的編碼風(fēng)格,缺乏相應(yīng)編碼規(guī)范意識的JavaScript學(xué)習(xí)者們改善他們的編碼形象。

編碼形象

以上我提出了編碼形象的概念,我個(gè)人認(rèn)為:

編碼形象 = 編碼風(fēng)格 + 編碼規(guī)范

一個(gè)良好的編碼形象就等于一個(gè)穿著得體的青年,對于程序員來說這是同行了解你優(yōu)秀能力的最直接最簡單的方式。

我們來看一下一段糟糕的編碼形象:

//打個(gè)招呼
function func(){
 var age=18,sex='man';
 var greeting='hello';
 if(age<=18&&sex=='man'){
 console.log(greeting+'little boy')
 }
 ...
}
func()

上方代碼整體縮在了一起,缺乏規(guī)范意識,閱讀體驗(yàn)很差,不忍直視。

再來看一段良好的代碼形象:

// 打個(gè)招呼
function greetFn() {
 var age = 18,
 sex = 'man',
 greeting = 'hello';
 if (age <= 18 && sex === 'man') {
 console.log(greeting + 'little boy');
 }
 ...
};
greetFn();

上方的代碼是不是感覺舒服多了?

由此可見養(yǎng)成一個(gè)良好的編碼形象是至關(guān)重要的,而本文主要講解的是基于JavaScript的編碼形象,即基于JavaScript的編碼風(fēng)格和編碼規(guī)范。

那么什么是編碼風(fēng)格,什么是編碼規(guī)范,兩者的區(qū)別又是什么?

編碼風(fēng)格

首先編碼風(fēng)格既然是風(fēng)格,就沒有對錯之分。就好比每個(gè)人的穿著打扮不同,有的人穿的比較得體,有的人穿的比較隨意而已。

而在JavaScript編碼風(fēng)格中,也有一套比較得體的風(fēng)格,尤其在團(tuán)隊(duì)開發(fā)中,我們不能隨意的書寫屬于自己的風(fēng)格。

下面就列舉幾種隨意的編碼風(fēng)格,并將其與良好的編碼風(fēng)格進(jìn)行對比。

1.合理注釋

// 不推薦的寫法
var name = '勞卜';//代碼和注釋之間沒有間隔

if (name) {
 /*
 *注釋之前無空行
 *星號后面無空格
 */
}
// 推薦的寫法
var name = '勞卜'; // 代碼和注釋之間有間隔

if (name) {
 /*
 * 注釋之前有空行
 * 星號后面有空格
 */
}

2.合理間隔

// 不推薦的寫法
var name='勞卜'; // 等號和兩側(cè)之間沒有間隔

// if塊級語句間沒有間隔
if(name){
 console.log('hello');
}
// 推薦的寫法
var name = '勞卜'; // 等號和兩側(cè)之間有間隔

// if塊級語句間有間隔
if (name) {
 console.log('hello');
}

3.合理縮進(jìn)

// 不推薦的寫法:沒有合理縮進(jìn)
function getName() {
console.log('勞卜'); 
}
// 推薦的寫法:合理縮進(jìn)
function getName() {
 console.log('勞卜');
}

4.合理空行

// 不推薦的寫法: 代碼功能塊之間沒有空行
function getName() {
 var name = '勞卜';
 if (name) {
 console.log('hello');
 }
}
// 推薦的寫法:代碼功能塊之間有空行
function getName() {
 var name = '勞卜';

 if (name) {
 console.log('hello');
 }
}

5.合理命名

// 不推薦的寫法
var getName = '勞卜'; // 變量命名前綴為動詞

// 函數(shù)命名前綴為名詞
function name() {
 console.log('hello');
}
// 推薦的寫法
var name = '勞卜'; // 變量命名前綴為名詞

// 函數(shù)命名前綴為動詞
function getName() {
 console.log('hello');
}

6.合理聲明

// 不推薦的寫法:函數(shù)在聲明之前使用
getName(); 

function getName() {
 console.log('hello');
}
// 推薦的寫法:函數(shù)在聲明之后使用
function getName() {
 console.log('hello');
}

getName();

7.合理結(jié)尾

// 不推薦的寫法:沒有使用分號結(jié)尾
var name = '勞卜' 

var getName = function() {
 console.log('hello')
}
// 推薦的寫法:使用分號結(jié)尾
var name = '勞卜'; 

var getName = function() {
 console.log('hello');
};

以上主要列舉了7個(gè)比較常見的編碼風(fēng)格的例子進(jìn)行了比較,在推薦的寫法和不推薦的寫法中兩者并沒有對錯之分,只是推薦的寫法相比較而言更容易閱讀和維護(hù),更適用于團(tuán)隊(duì)開發(fā),也是良好編碼形象的體現(xiàn)。

編碼規(guī)范

對于編碼規(guī)范,既然是規(guī)范,那我們就應(yīng)該按照一定的規(guī)則來編寫。隨意編寫違反編碼規(guī)范的代碼,可能會導(dǎo)致程序的出錯和潛在的bug,因此其相對于編碼風(fēng)格來說應(yīng)該更加嚴(yán)謹(jǐn),也有人會把編碼風(fēng)格包含在編碼規(guī)范之中。

下面就列舉幾個(gè)常見的實(shí)例代碼:

1.比較參數(shù)

// 不推薦的寫法:==和!=比較時(shí)會進(jìn)行類型轉(zhuǎn)換,應(yīng)盡量避免使用
var num = 123;

if (num == '123') {
 console.log(num);
} else if (num != '321') {
 console.log('321');
}
// 推薦的寫法:使用===和!==來進(jìn)行比較
var num = 123;

if (num === '123') {
 console.log(num);
} else if (num !== '321') {
 console.log('321');
}

2.包裹if語句

// 不推薦的寫法:if語句不用大話號包裹會出現(xiàn)潛在bug
var num = 123;
if (num === '123')
 console.log(num);
// 推薦的寫法:if語句用大話號包裹
var num = 123;
if (num === '123') {
 console.log(num);
}

3.慎用eval

// 不推薦的寫法:應(yīng)避免使用eval,不安全,非常耗性能(一次解析成js語句,一次執(zhí)行)
var json = '{"name": "勞卜", "func": alert("hello")}';
eval('(' + json + ')'); // 彈出“hello”
// 推薦的寫法
var json = '{"name": "勞卜", "func": alert("hello")}';
JSON.parse(json); // 校驗(yàn)報(bào)錯

4.判斷類型

// 不推薦的寫法:用typeof來判斷構(gòu)造函數(shù)創(chuàng)建的對象
var str = new String('勞卜'); 
console.log(typeof str); // 'object'
// 推薦的寫法:用instanceof來判斷構(gòu)造函數(shù)創(chuàng)建的對象
var str = new String('勞卜'); 
console.log(str instanceof String); // true

5.檢測屬性

// 不推薦的寫法:使用undefined和null來檢測一個(gè)屬性是否存在
if (obj['name'] !== undefined) {
 console.log('name屬性存在'); // 若obj.name為undefined時(shí)則會導(dǎo)致判斷出錯
}
if (obj['name'] !== null) {
 console.log('name屬性存在'); // 若obj.name為null時(shí)則會導(dǎo)致判斷出錯
}
// 推薦的寫法:使用in運(yùn)算符來檢測對象屬性是否存在,使用hasOwnProperty方法來檢測不包含原型鏈上的對象屬性是否存在
if ('name' in obj) {
 console.log('name屬性存在');
}
if (obj.hasOwnProperty('name')) {
 console.log('name屬性存在');
}

以上主要列舉了5個(gè)常見的編碼規(guī)范的例子,合理地規(guī)范自己的代碼能夠很大程度上減少不必要的維護(hù)成本和潛在的bug風(fēng)險(xiǎn),對于JavaScript學(xué)習(xí)者來說應(yīng)該銘記于心。

結(jié)語

“程序是寫給人讀的,只是偶爾讓計(jì)算機(jī)執(zhí)行一下?!蔽覀儾荒転榱素潏D一時(shí)的方便而親手毀了自己的代碼形象,這會給他人和整個(gè)項(xiàng)目帶來不必要的麻煩。

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!

相關(guān)文章

  • JS數(shù)組中filter方法的使用實(shí)例

    JS數(shù)組中filter方法的使用實(shí)例

    在數(shù)組的使用中我們通常會有數(shù)組的過濾的需求,比如值在某個(gè)范圍內(nèi)的數(shù)字,用來組成一個(gè)新的數(shù)組,這就用到了數(shù)組的過濾,下面這篇文章主要給大家介紹了關(guān)于JS數(shù)組中filter方法使用的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • 淺談javascript的url參數(shù)parse和build函數(shù)

    淺談javascript的url參數(shù)parse和build函數(shù)

    下面小編就為大家?guī)硪黄獪\談javascript的url參數(shù)parse和build函數(shù)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • 利用js判斷瀏覽器類型(是否為IE,Firefox,Opera瀏覽器)

    利用js判斷瀏覽器類型(是否為IE,Firefox,Opera瀏覽器)

    我們開發(fā)的人來說經(jīng)常要加個(gè)判斷,要不可能某些功能沒法正常使用。要是沒加個(gè)判斷就會給大家?guī)硇┞闊?/div> 2013-11-11
  • 微信小程序?qū)崿F(xiàn)購物車小功能

    微信小程序?qū)崿F(xiàn)購物車小功能

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)購物車小功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • JS表的模擬方法

    JS表的模擬方法

    這篇文章主要介紹了JS表的模擬方法,涉及javascript模擬表的生成、添加與刪除節(jié)點(diǎn)的操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • 淺談時(shí)鐘的生成(js手寫簡潔代碼)

    淺談時(shí)鐘的生成(js手寫簡潔代碼)

    下面小編就為大家?guī)硪黄獪\談時(shí)鐘的生成(js手寫簡潔代碼)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-08-08
  • 在JS中如何把毫秒轉(zhuǎn)換成規(guī)定的日期時(shí)間格式實(shí)例

    在JS中如何把毫秒轉(zhuǎn)換成規(guī)定的日期時(shí)間格式實(shí)例

    本篇文章主要介紹了在JS中如何把毫秒轉(zhuǎn)換成規(guī)定的日期時(shí)間格式實(shí)例,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-05-05
  • javascript實(shí)現(xiàn)tabs選項(xiàng)卡切換效果(擴(kuò)展版)

    javascript實(shí)現(xiàn)tabs選項(xiàng)卡切換效果(擴(kuò)展版)

    常用的頁面效果有彈出層效果,無縫滾動效果,選項(xiàng)卡切換效果,接下來與大家分享一款自己用原生javascript寫的選項(xiàng)卡切換效果在原有的基礎(chǔ)上進(jìn)行了擴(kuò)展,加入了自動輪播,這樣就變成了類似圖片輪播的效果
    2013-03-03
  • Javascript 函數(shù)的四種調(diào)用模式

    Javascript 函數(shù)的四種調(diào)用模式

    這篇文章主要介紹了Javascript 函數(shù)的四種調(diào)用模式的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • wangEditor編輯器失去焦點(diǎn)后仍然可以在原位置插入圖片分析

    wangEditor編輯器失去焦點(diǎn)后仍然可以在原位置插入圖片分析

    本文給大家?guī)淼氖且豢罘浅2诲e的富文本編輯器WangEditor,他最大的特點(diǎn)是它在ie6,7,8上都可以做到失去焦點(diǎn)后仍然可以在原位置插入圖片,而且代碼量很少,下面我們就來分析下他是如何實(shí)現(xiàn)的呢
    2015-05-05

最新評論

汝南县| 格尔木市| 海阳市| 阳江市| 鹤壁市| 玉树县| 南宁市| 临西县| 迭部县| 建阳市| 德惠市| 定州市| 芒康县| 温宿县| 社会| 陆河县| 新闻| 云浮市| 寻乌县| 堆龙德庆县| 綦江县| 长子县| 桐梓县| 四平市| 酒泉市| 聂荣县| 闸北区| 潮州市| 锡林郭勒盟| 南皮县| 三台县| 彩票| 高淳县| 江门市| 丰台区| 建宁县| 涞源县| 崇信县| 太康县| 班玛县| 古交市|