欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript常用代碼書寫規(guī)范的超全面總結(jié)

 更新時間:2016年09月11日 16:09:52   投稿:daisy  
這篇文章給大家全面總結(jié)了JavaScript常用代碼的書寫規(guī)范,分別利用推薦和不推薦的兩種示例代碼讓大家更能直接的了解書寫規(guī)范,其實關(guān)于javascript代碼規(guī)范我們應(yīng)該遵循古老的原則:“能做并不意味著應(yīng)該做”,好了,下面我們就來一起看看吧。

一、全局命名空間污染

總是將代碼包裹在一個立即的函數(shù)表達式里面,形成一個獨立的模塊。

不推薦

var x = 10,
 y = 100;
console.log(window.x + ' ' + window.y);

推薦

;(function(window){
 'use strict';
 var x = 10,
  y = 100;
 console.log(window.x + ' ' + window.y);
}(window));

二、立即執(zhí)行函數(shù)

在立即執(zhí)行函數(shù)里面,如果有用到全局變量應(yīng)該通過變量傳遞的方式,讓立即執(zhí)行函數(shù)的函數(shù)體在調(diào)用時,能以局部變量的形式調(diào)用,在一定程度上提升程序性能。

并且應(yīng)該在立即執(zhí)行函數(shù)的形參里加上undefined,在最后一個位置,這是因為ES3里undefined是可以讀寫的,如果在全局位置更改undefined的值,你的代碼可能得不到逾期的結(jié)果。

另外推薦在立即執(zhí)行函數(shù)開始跟結(jié)尾都添加上分號,避免在合并時因為別人的代碼不規(guī)范而影響到我們自己的代碼

不推薦

(function(){
 'use strict';
 var x = 10,
  y = 100,
  c,
  elem=$('body');
 console.log(window.x + ' ' + window.y);
 $(document).on('click',function(){

 });
 if(typeof c==='undefined'){
  //你的代碼
 }
}());

推薦

;(function($,window,document,undefined){
 'use strict';
 var x = 10,
  y = 100,
  c,
  elem=$('body');
 console.log(window.x + ' ' + window.y);
 $(document).on('click',function(){

 });
 if(typeof c==='undefined'){
  //你的代碼
 }
}(jQuery,window,document));

三、嚴格模式

ECMAScript 5 嚴格模式可在整個腳本或獨個方法內(nèi)被激活。它對應(yīng)不同的 javascript 語境會做更加嚴格的錯誤檢查。嚴格模式也確保了 javascript 代碼更加的健壯,運行的也更加快速。

嚴格模式會阻止使用在未來很可能被引入的預(yù)留關(guān)鍵字。

你應(yīng)該在你的腳本中啟用嚴格模式,最好是在獨立的 立即執(zhí)行函數(shù) 中應(yīng)用它。避免在你的腳本第一行使用它而導(dǎo)致你的所有腳本都啟動了嚴格模式,這有可能會引發(fā)一些第三方類庫的問題。

不推薦

'use strict';
(function(){

}());

推薦

(function(){
 'use strict';
}());

四、變量聲明

對所有的變量聲明,我們都應(yīng)該指定var,如果沒有指定var,在嚴格模式下會報錯,并且同一個作用域內(nèi)的變量應(yīng)該盡量采用一個var去聲明,多個變量用“,”隔開。

不推薦

function myFun(){
 x=5;
 y=10;
}

不完全推薦

function myFun(){
 var x=5;
 var y=10;
}

推薦

function myFun(){
 var x=5,
  y=10;
}

五、使用帶類型判斷的比較判斷

是使用 === 精確的比較操作符,避免在判斷的過程中,由 JavaScript 的強制類型轉(zhuǎn)換所造成的困擾。

如果你使用 === 操作符,那比較的雙方必須是同一類型為前提的條件下才會有效。

不推薦

(function(w){
 'use strict';

 w.console.log('0' == 0); // true
 w.console.log('' == false); // true
 w.console.log('1' == true); // true
 w.console.log(null == undefined); // true

 var x = {
 valueOf: function() {
  return 'X';
 }
 };

 w.console.log(x == 'X');//true

}(window.console.log));

推薦

(function(w){
 'use strict';

 w.console.log('0' === 0); // false
 w.console.log('' === false); // false
 w.console.log('1' === true); // false
 w.console.log(null === undefined); // false

 var x = {
 valueOf: function() {
  return 'X';
 }
 };

 w.console.log(x === 'X');//false

}(window));

六、變量賦值時的邏輯操作

邏輯操作符 || 和 && 也可被用來返回布爾值。如果操作對象為非布爾對象,那每個表達式將會被自左向右地做真假判斷?;诖瞬僮鳎罱K總有一個表達式被返回回來。這在變量賦值時,是可以用來簡化你的代碼的。

不推薦

if(!x) {
 if(!y) {
 x = 1;
 } else {
 x = y;
 }
}

推薦

x = x || y || 1;

七、分號

總是使用分號,因為隱式的代碼嵌套會引發(fā)難以察覺的問題。當然我們更要從根本上來杜絕這些問題[1] 。

以下幾個示例展示了缺少分號的危害:

// 1.
MyClass.prototype.myMethod = function() {
 return 42;
} //這里沒有分號

(function() {

})();

 //2.
var x = {
 'i': 1,
 'j': 2
} // 這里沒有分號
//我知道這樣的代碼你可能永遠不會寫,但是還是舉一個例子
[ffVersion, ieVersion][isIE]();

 // 3.
var THINGS_TO_EAT = [apples, oysters, sprayOnCheese] // 這里沒有分號

-1 == resultOfOperation() || die();

錯誤結(jié)果

     1. JavaScript 錯誤 —— 首先返回 42 的那個 function 被第二個function 當中參數(shù)傳入調(diào)用,接著數(shù)字 42 也被“調(diào)用”而導(dǎo)致出錯。

     2.八成你會得到 ‘no such property in undefined' 的錯誤提示,因為在真實環(huán)境中的調(diào)用是這個樣子:xffVersion, ieVersion().

     3.die 總是被調(diào)用。因為數(shù)組減 1 的結(jié)果是 NaN,它不等于任何東西(無論 resultOfOperation 是否返回 NaN)。所以最終的結(jié)果是 die() 執(zhí)行完所獲得值將賦給 THINGS_TO_EAT.

八、語句塊內(nèi)的函數(shù)聲明

切勿在語句塊內(nèi)聲明函數(shù),在 ECMAScript 5 的嚴格模式下,這是不合法的。函數(shù)聲明應(yīng)該在作用域的頂層。但在語句塊內(nèi)可將函數(shù)申明轉(zhuǎn)化為函數(shù)表達式賦值給變量。

不推薦

if (x) {
 function foo() {}
}

推薦

if (x) {
 var foo = function() {};
}

九、不要使用eval函數(shù)

eval() 不但混淆語境還很危險,總會有比這更好、更清晰、更安全的另一種方案來寫你的代碼,因此盡量不要使用 eval 函數(shù)。

十、數(shù)組和對象字面量

1.用數(shù)組和對象字面量來代替數(shù)組和對象構(gòu)造器。數(shù)組構(gòu)造器很容易讓人在它的參數(shù)上犯錯。

不推薦

//數(shù)組長度3
var a1 = new Array(x1, x2, x3);
//數(shù)組長度2
var a2 = new Array(x1, x2);

//如果x1是一個自然數(shù),那么它的長度將為x1
//如果x1不是一個自然數(shù),那么它的長度將為1
var a3 = new Array(x1);

var a4 = new Array();

正因如此,如果將代碼傳參從兩個變?yōu)橐粋€,那數(shù)組很有可能發(fā)生意料不到的長度變化。為避免此類怪異狀況,請總是采用可讀的數(shù)組字面量。

推薦

var a = [x1, x2, x3];
var a2 = [x1, x2];
var a3 = [x1];
var a4 = [];

2.對象構(gòu)造器不會有類似的問題,但是為了可讀性和統(tǒng)一性,我們應(yīng)該使用對象字面量。

不推薦

var o = new Object();

var o2 = new Object();
o2.a = 0;
o2.b = 1;
o2.c = 2;
o2['strange key'] = 3;

推薦

var o = {};
var o2 = {
 a: 0,
 b: 1,
 c: 2,
 'strange key': 3
};

十一、三元條件判斷(if 的快捷方法)

用三元操作符分配或返回語句。在比較簡單的情況下使用,避免在復(fù)雜的情況下使用。沒人愿意用 10 行三元操作符把自己的腦子繞暈。

不推薦

if(x === 10) {
 return 'valid';
} else {
 return 'invalid';
}

推薦

return x === 10 ? 'valid' : 'invalid';

十二、for循環(huán)

使用for循環(huán)過程中,數(shù)組的長度,使用一個變量來接收,這樣有利于代碼執(zhí)行效率得到提高,而不是每走一次循環(huán),都得重新計算數(shù)組長度

不推薦

for(var i=0;i<arr.length,i++){

}

推薦

for(var i=0,len=arr.length;i<len,i++){

}

十三、重復(fù)的dom操作

重復(fù)的dom操作,使用一個變量來進行接收很有必要,而不是頻繁的去操作dom樹,這對性能與代碼的整潔及易維護性帶來不好的影響

不推薦

$('.myDiv').find('.span1').text('1');
$('.myDiv').find('.span2').text('2');
$('.myDiv').find('.span3').text('3');
$('.myDiv').find('.span4').text('4');

推薦

var mydiv=$('.myDiv');
mydiv.find('.span1').text('1');
mydiv.find('.span2').text('2');
mydiv.find('.span3').text('3');
mydiv.find('.span4').text('4');

jquery .end()可使用的情況下應(yīng)該優(yōu)先使用.end()

推薦

$('.myDiv').find('.span1').text('1')
   .end().find('.span2').text('2');
   .end().find('.span3').text('3');
   .end().find('.span4').text('4');

十四、注釋規(guī)范

在描寫注釋時,推薦格式化且統(tǒng)一的注釋風格,在寫注釋時盡量描述寫代碼時的思路,而不是代碼做了什么。

不推薦

//獲取訂單
function getOrderByID(id){
 var order;
 //...
 return order;
}

方法的注釋應(yīng)該統(tǒng)一用塊級注釋

推薦

/**
 * 根據(jù)訂單id獲取訂單詳細數(shù)據(jù)
 * @param {[number]} id [訂單ID]
 * @return {[order]} [訂單詳細信息]
 */
function getOrderByID(id){
 var order;
 //...
 return order;
}

總結(jié)

JavaScript常用代碼書寫規(guī)范總結(jié)到這就基本結(jié)束了,這篇文章總結(jié)的還是很全面的,對大家使用或?qū)W些Javascript具有一定的參考借鑒價值,希望對大家能有所幫助,如果有疑問大家可以留言交流。

  • 在JS中如何使用css變量詳解

    在JS中如何使用css變量詳解

    這篇文章主要給大家介紹了關(guān)于如何在JS中如何使用css變量以及export之javascript關(guān)鍵字的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2021-09-09
  • JS添加刪除一組文本框并對輸入信息加以驗證判斷其正確性

    JS添加刪除一組文本框并對輸入信息加以驗證判斷其正確性

    需要添加幾組數(shù)據(jù)到數(shù)據(jù)庫,但是具體幾組數(shù)據(jù)不確定,有客戶來填寫,所以,這里我用JS進行添加刪除子方案,并要對方案輸入的正確性加以判斷,感興趣的朋友可以了解下
    2013-04-04
  • JS實現(xiàn)控制表格只顯示行邊框或者只顯示列邊框的方法

    JS實現(xiàn)控制表格只顯示行邊框或者只顯示列邊框的方法

    這篇文章主要介紹了JS實現(xiàn)控制表格只顯示行邊框或者只顯示列邊框的方法,涉及javascript使用表格對象的rules屬性的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • es6中some和every方法使用簡單示例

    es6中some和every方法使用簡單示例

    JavaScript在ES6版本后提供了一些更加便捷的方法供開發(fā)者使用,實現(xiàn)原理其實是在對應(yīng)的構(gòu)造函數(shù)原型提供方法,下面這篇文章主要給大家介紹了關(guān)于es6中some和every方法使用的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • 小程序?qū)崿F(xiàn)多個選項卡切換

    小程序?qū)崿F(xiàn)多個選項卡切換

    這篇文章主要為大家詳細介紹了小程序?qū)崿F(xiàn)多個選項卡切換,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • JavaScript 數(shù)組的進化與性能分析

    JavaScript 數(shù)組的進化與性能分析

    這篇文章主要介紹了JavaScript 數(shù)組的進化與性能分析,本文講得更多的是內(nèi)存、優(yōu)化、語法差異、性能、近來的演進。需要的朋友可以參考下
    2017-09-09
  • 微信小程序?qū)崿F(xiàn)答題功能

    微信小程序?qū)崿F(xiàn)答題功能

    這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)答題功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • JS 實現(xiàn)請求調(diào)度器

    JS 實現(xiàn)請求調(diào)度器

    這篇文章主要介紹了JS 實現(xiàn)請求調(diào)度器的方法,幫助大家更好的理解和學(xué)習(xí)使用js,感興趣的朋友可以了解下
    2021-03-03
  • JS實現(xiàn)導(dǎo)出Excel和CSV文件操作

    JS實現(xiàn)導(dǎo)出Excel和CSV文件操作

    這篇文章介紹了JS實現(xiàn)導(dǎo)出Excel和CSV文件的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • 最新評論