中文字幕二区_国产精品免费在线观看_黄色网站观看_人人草人人澡_日本真实娇小xxxx

您的位置: 首頁(yè) > 技術(shù)文檔 > 網(wǎng)頁(yè)制作 > 如何編寫(xiě)高質(zhì)量的Javascript代碼
Script 元素 type 屬性的妙用 回到列表 介紹27款經(jīng)典的CSS框架
 如何編寫(xiě)高質(zhì)量的Javascript代碼

作者:rockux 時(shí)間: 2011-03-04 文檔類(lèi)型:翻譯 來(lái)自:rockux

第 1 頁(yè) 如何編寫(xiě)高質(zhì)量的Javascript代碼 [1]
第 2 頁(yè) 如何編寫(xiě)高質(zhì)量的Javascript代碼 [2]
第 3 頁(yè) 如何編寫(xiě)高質(zhì)量的Javascript代碼 [3]
第 4 頁(yè) 如何編寫(xiě)高質(zhì)量的Javascript代碼 [4]
第 5 頁(yè) 如何編寫(xiě)高質(zhì)量的Javascript代碼 [5]
第 6 頁(yè) 如何編寫(xiě)高質(zhì)量的Javascript代碼 [6]
第 7 頁(yè) 如何編寫(xiě)高質(zhì)量的Javascript代碼 [7]
第 8 頁(yè) 如何編寫(xiě)高質(zhì)量的Javascript代碼 [8]
第 9 頁(yè) 如何編寫(xiě)高質(zhì)量的Javascript代碼 [9]

switch模式

按照下面的風(fēng)格寫(xiě)switch的話,可以提高你的代碼可讀性和健壯性:

var inspect_me = 0,
    result = '';
switch (inspect_me) {
case 0:
   result = "zero";
   break;
case 1:
   result = "one";
   break;
default:
   result = "unknown";
}

需要注意下面幾個(gè)方面:

  • 將case和switch對(duì)齊。
  • case的內(nèi)容縮進(jìn)
  • 每一個(gè)case之后都有一個(gè)清晰的break
  • 避免順序往下執(zhí)行case,非要如此的話,文檔一定要寫(xiě)清楚
  • 最后使用default,保證在沒(méi)有命中case的情況下也有反饋

避免隱藏的類(lèi)型轉(zhuǎn)換

Javascript在你比較兩個(gè)變量的時(shí)候會(huì)進(jìn)行類(lèi)型的轉(zhuǎn)換,這就是為什么 false == 0或者”" == 0會(huì)返回true。

為了避免這種隱藏的類(lèi)型轉(zhuǎn)換帶來(lái)的迷惑,最好使用===或者!==操作符來(lái)比較:

var zero = 0;
if (zero === false) {
   // not executing because zero is 0, not false
}
 
// antipattern
if (zero == false) {
   // this block is executed...
}

還有另外一種流派持這樣的觀點(diǎn):當(dāng)==夠用時(shí)使用===就是多余的。比如,當(dāng)你使用typeof的時(shí)候你知道會(huì)返回string,所以沒(méi)必要使用嚴(yán)格的檢驗(yàn)。然而,JSLint要求嚴(yán)格檢驗(yàn);他最大程度使代碼在閱讀的時(shí)候減少歧義,(“這個(gè)==是故意呢還是疏漏?”)。

避免使用eval()

如果你在你的代碼中使用eval(),那么要記住”eval() is evil”。這個(gè)方法會(huì)將傳入的字符串當(dāng)做js代碼來(lái)執(zhí)行。如果代碼是在運(yùn)行前就確定的,那么沒(méi)有必要使用eval()。如果代碼是在運(yùn)行時(shí)動(dòng)態(tài)確定的,那么也有其他更安全的辦法。例如使用方括號(hào)形式訪問(wèn)元素的屬性:

// antipattern
var property = "name";
alert(eval("obj." + property)); 
 
// preferred
var property = "name";
alert(obj[property]);

使用eval()還有安全問(wèn)題,比如你運(yùn)行網(wǎng)絡(luò)上的一段代碼,而這段代碼又被別人篡改了。在處理Ajax請(qǐng)求返回的JSON數(shù)據(jù)的時(shí)候,最好還是使用瀏覽器內(nèi)建的處理方法,如果對(duì)于低端的瀏覽器不支持的,可以從JSON.org上下載對(duì)應(yīng)的處理庫(kù)。

另外還要記住使用setTimeout、setInterval以及Function的構(gòu)造函數(shù)的是,傳入的字符串的參數(shù),js的處理方法跟eval()類(lèi)似,所以也要注意。因?yàn),js會(huì)把你傳入的字符串解析執(zhí)行:

// antipatterns
setTimeout("myFunc()", 1000);
setTimeout("myFunc(1, 2, 3)", 1000); 
 
// preferred
setTimeout(myFunc, 1000);
setTimeout(function () {
   myFunc(1, 2, 3);
}, 1000);

使用Function的構(gòu)造函數(shù),跟eval()差不多,也要注意。這是個(gè)非常有用的功能,但是常常被錯(cuò)用。如果你必須使用eval(),那么可以考慮new一個(gè)Function來(lái)替代。另外的一個(gè)好處就是,使用Function的構(gòu)造函數(shù),函數(shù)的作用域在本方法內(nèi),這樣你使用var聲明的變量就不會(huì)變成全局的。另外一個(gè)防止eval()生成全局變量的辦法就是使用匿名函數(shù)。

看看下面這個(gè)例子,只有un變量最終是全局的:

console.log(typeof un); // "undefined"
console.log(typeof deux); // "undefined"
console.log(typeof trois); // "undefined" 
 
var jsstring = "var un = 1; console.log(un);";
eval(jsstring); // logs "1" 
 
jsstring = "var deux = 2; console.log(deux);";
new Function(jsstring)(); // logs "2" 
 
 jsstring = "var trois = 3; console.log(trois);";
 (function () {
    eval(jsstring);
 }()); // logs "3" 
 
 console.log(typeof un); // number
 console.log(typeof deux); // undefined
 console.log(typeof trois); // undefined

eval()和Function構(gòu)造函數(shù)的另一個(gè)區(qū)別就是eval()會(huì)影響到作用域,而Function則相當(dāng)于一個(gè)沙盒。例如:

(function () {
   var local = 1;
   eval("local = 3; console.log(local)"); // logs 3
   console.log(local); // logs 3
}()); 
 
(function () {
   var local = 1;
   Function("console.log(typeof local);")(); // logs undefined
 }());

出處:rockux
責(zé)任編輯:bluehearts

上一頁(yè) 如何編寫(xiě)高質(zhì)量的Javascript代碼 [5] 下一頁(yè) 如何編寫(xiě)高質(zhì)量的Javascript代碼 [7]

◎進(jìn)入論壇網(wǎng)頁(yè)制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評(píng)論。

相關(guān)文章 更多相關(guān)鏈接
加載 Javascript 最佳實(shí)踐
GC與JS內(nèi)存泄露
HTML,CSS和JavaScript速查表
JavaScript異步方法隊(duì)列鏈
JavaScript框架比較
作者文章
網(wǎng)站導(dǎo)航設(shè)計(jì)模式指南
關(guān)鍵字搜索 常規(guī)搜索 推薦文檔
熱門(mén)搜索:CSS Fireworks 設(shè)計(jì)比賽 網(wǎng)頁(yè)制作 web標(biāo)準(zhǔn) 用戶(hù)體驗(yàn) UE photoshop Dreamweaver Studio8 Flash 手繪 CG
站點(diǎn)最新 站點(diǎn)最新列表
周大!熬•自然”設(shè)計(jì)大賽開(kāi)啟
國(guó)際體驗(yàn)設(shè)計(jì)大會(huì)7月將在京舉行
中國(guó)國(guó)防科技信息中心標(biāo)志征集
云計(jì)算如何讓安全問(wèn)題可控
云計(jì)算是多數(shù)企業(yè)唯一擁抱互聯(lián)網(wǎng)的機(jī)會(huì)
阿里行云
云手機(jī)年終巨獻(xiàn),送禮標(biāo)配299起
阿里巴巴CTO王堅(jiān)的"云和互聯(lián)網(wǎng)觀"
1499元買(mǎi)真八核 云OS雙蛋大促
首屆COCO桌面手機(jī)主題設(shè)計(jì)大賽
欄目最新 欄目最新列表
淺談JavaScript編程語(yǔ)言的編碼規(guī)范
如何在illustrator中繪制臺(tái)歷
Ps簡(jiǎn)單繪制一個(gè)可愛(ài)的鉛筆圖標(biāo)
數(shù)據(jù)同步算法研究
用ps作簡(jiǎn)單的作品展示頁(yè)面
CSS定位機(jī)制之一:普通流
25個(gè)最佳最閃亮的Eclipse開(kāi)發(fā)項(xiàng)目
Illustrator中制作針線縫制文字效果
Photoshop制作印刷凹凸字體
VS2010中創(chuàng)建自定義SQL Rule
>> 分頁(yè) 首頁(yè) 前頁(yè) 后頁(yè) 尾頁(yè) 頁(yè)次:6/9頁(yè) 1個(gè)記錄/頁(yè) 轉(zhuǎn)到 頁(yè) 共9個(gè)記錄

藍(lán)色理想版權(quán)申明:除部分特別聲明不要轉(zhuǎn)載,或者授權(quán)我站獨(dú)家播發(fā)的文章外,大家可以自由轉(zhuǎn)載我站點(diǎn)的原創(chuàng)文章,但原作者和來(lái)自我站的鏈接必須保留(非我站原創(chuàng)的,按照原來(lái)自一節(jié),自行鏈接)。文章版權(quán)歸我站和作者共有。

轉(zhuǎn)載要求:轉(zhuǎn)載之圖片、文件,鏈接請(qǐng)不要盜鏈到本站,且不準(zhǔn)打上各自站點(diǎn)的水印,亦不能抹去我站點(diǎn)水印。

特別注意:本站所提供的攝影照片,插畫(huà),設(shè)計(jì)作品,如需使用,請(qǐng)與原作者聯(lián)系,版權(quán)歸原作者所有,文章若有侵犯作者版權(quán),請(qǐng)與我們聯(lián)系,我們將立即刪除修改。

您的評(píng)論
用戶(hù)名:  口令:
說(shuō)明:輸入正確的用戶(hù)名和密碼才能參與評(píng)論。如果您不是本站會(huì)員,你可以注冊(cè) 為本站會(huì)員。
注意:文章中的鏈接、內(nèi)容等需要修改的錯(cuò)誤,請(qǐng)用報(bào)告錯(cuò)誤,以利文檔及時(shí)修改。
不評(píng)分 1 2 3 4 5
注意:請(qǐng)不要在評(píng)論中含與內(nèi)容無(wú)關(guān)的廣告鏈接,違者封ID
請(qǐng)您注意:
·不良評(píng)論請(qǐng)用報(bào)告管理員,以利管理員及時(shí)刪除。
·尊重網(wǎng)上道德,遵守中華人民共和國(guó)的各項(xiàng)有關(guān)法律法規(guī)
·承擔(dān)一切因您的行為而直接或間接導(dǎo)致的民事或刑事法律責(zé)任
·本站評(píng)論管理人員有權(quán)保留或刪除其管轄評(píng)論中的任意內(nèi)容
·您在本站發(fā)表的作品,本站有權(quán)在網(wǎng)站內(nèi)轉(zhuǎn)載或引用
·參與本評(píng)論即表明您已經(jīng)閱讀并接受上述條款
推薦文檔 | 打印文檔 | 評(píng)論文檔 | 報(bào)告錯(cuò)誤  
專(zhuān)業(yè)書(shū)推薦 更多內(nèi)容
網(wǎng)站可用性測(cè)試及優(yōu)化指南
《寫(xiě)給大家看的色彩書(shū)1》
《跟我去香港》
眾妙之門(mén)—網(wǎng)站UI 設(shè)計(jì)之道
《Flex 4.0 RIA開(kāi)發(fā)寶典》
《贏在設(shè)計(jì)》
犀利開(kāi)發(fā)—jQuery內(nèi)核詳解與實(shí)踐
作品集 更多內(nèi)容

雜⑦雜⑧ Gold NORMANA V2