亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

我的NodeJs學習小結(一)

2019-11-20 14:22:23
字體:
來源:轉載
供稿:網友

 這第一篇就談談NodeJs的一些編程細節吧。

1、遍歷數組

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

      這樣寫的一個好處就是讓每次循環少一步獲取數組對象長度的操作,數組長度越長,價值越明顯。

2、判斷變量的真假

if (a) {...} //a='', a='0', a=[], a={}

      if條件判斷的結果分別是:false, true, true, true。這個結果和PHP的結果是不同的,不要混淆。還需要區分它和非恒等判斷相似的情況。

3、0值非恒等判斷

1 if (0 == '0') {...} //true2 if (0 == []) {...} //true3 if (0 == [0]) {...} //true4 if (0 == {}) {...} //false5 if (0 == null) {...} //false6 if (0 == undefined) {...} //false

      其實還有很多這種詭異的判斷,我只列出了較為常見的。如果想弄明白其中的規則,請參閱我的另一篇博文:【JavaScript】深入分析JavaScript的關系運算和if語句。

4、parseInt的陷阱

var n = parseInt(s); //s='010'

        該語句執行后n值為8,而不是10。雖然很多人知道這一點,但是編程中難免會出錯,我深有體會。所以,最好按下面的方式來寫,就不會出錯了。

var n = parseInt(s, 10);

5、變量在使用前一定要先聲明

      雖然,直接使用變量而不聲明也不會出錯,但是,這樣寫是很容易出錯的。因為解釋器會把它解釋成全局變量,很容易和其他全局變量重名而導致出錯。所以,一定要養成變量使用前要先聲明的好習慣。

6、循環中存在異步的情況

for (var i=0, l=arr.length; i<l; i++) {   var sql = "select * from nx_user";  db.query(sql, function(){    sys.log(i + ': ' + sql);  }); //db.query為表查詢操作,是異步操作}

      你會發現,輸出的結果都是相同的,而且是當i=arr.length-1時的輸出內容。因為JavaScript是單線程的,它會先執行完整個循環的同步內容之后,才去執行其中的異步操作。代碼中的匿名回調函數就是一個異步回調。執行到該函數的時候,for循環以及后面的一些同步操作都已經執行完畢。出于閉包原則,該函數會保留for循環的最后一次循環的sql變量和i變量的內容,所以才會導致錯誤的結果。

      那怎么辦呢?解決方法有兩種,一種是使用立即函數,如下:

for (var i=0, l=arr.length; i<l; i++) {  var sql = "select * from nx_user";  (function(sql, i){    db.query(sql, function(){      sys.log(i + ': ' + sql);    }); //db.query為表查詢操作,是異步操作  })(sql, i);}

       還有一種方法是將異步操作部分提取出來,單寫一個函數,如下:

var outputSQL = function(sql, i){   db.query(sql, function(){      sys.log(i + ': ' + sql);  }); //db.query為表查詢操作,是異步操作}for (var i=0, l=arr.length; i<l; i++) {  var sql = "select * from nx_user";  outputSQL(sql, i); }


7 、在對大量數據作處理時,盡量避免循環嵌套。

      因為循環嵌套的處理時間會隨著數據量的增加成指數級增長,所以應盡量避免。遇到這種情況,如果沒有更好的辦法,一般采取的策略是以空間換時間,即建立一張二級循環數據的Hash映射表。當然,還要具體情況具體分析。還有一點要說的是,某些方法本身就是一個循環體,如Array.sort()(該方法應該是用了兩層循環實現),在使用的時候需加注意。

8、盡量避免遞歸調用。

      遞歸調用的優點是代碼簡潔,實現簡單,而它的缺點很重要,說明如下:

      (1)函數棧的大小會隨著遞歸層次成線性增長,而函數棧是有上限值的,當遞歸達到一定層數后函數棧就會溢出,從而導致程序出錯;

      (2)每遞歸一層都會增加額外的壓棧和出棧操作,即函數調用過程中的保存現場和恢復現場。

      所以,應盡量避免遞歸調用。

9、關于模塊文件的作用域隔離。

      Node在編譯JavaScript模塊文件的時候,已經對其內容進行了頭尾包裝,如下:

(function(exports, require, module, __filename, __dirname){  你的JavaScript文件代碼});

從而使每個模塊文件之間進行了作用域隔離。所以,當你編寫NodeJs模塊文件的時候,不需要自己再加一層作用域隔離封裝了。如下面的代碼格式,只會額外增加一層函數調用,是不推薦的:

(function(){  ... ...})();

 10、數組和對象不要混用

      下面是錯誤代碼的示例:

var o = [];o['name'] = 'LiMing';

      數組和對象混用可能會導致不可預知的錯誤。我的一個同事就遇到過一個很奇怪的問題,先看代碼:

var o = [];o['name'] = 'LiMing';var s = JSON.stringify(o);

       他本以為對象o的name屬性會在JSON串中,結果就是沒有。當時我也很奇怪,但我有預感到是數組和對象混用的問題,試了一下,果然是它的問題。后來我在ECMA規范中查到,數組在序列化時是按JA規則進行的。所以,要養成一個好的編程習慣,正確使用數組和對象,不要混用。

11、promise優雅編程

       相信接觸過nodeJs的人都有過這樣的體驗,當異步回調里嵌套異步回調的時候,代碼就顯得很混亂,缺乏易讀性。nodeJs的這一窘境可以借助promise來克服。promise就像一個雕琢器,讓你的代碼變得優雅、美觀。promise有個A+規范,網上有幾種實現方式,可以參閱。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品劲爆视频| 亚洲mm色国产网站| 精品国产91久久久| 热久久免费国产视频| 91精品国产乱码久久久久久久久| 国产欧美日韩精品丝袜高跟鞋| 国产精品久久久久免费a∨大胸| 国产日韩综合一区二区性色av| 亚洲欧美在线播放| 国产精品久久久久久久久久久久久久| 国产91在线播放精品91| 国产一区二区激情| 国产精品视频精品视频| 在线看日韩欧美| 久久久91精品国产一区不卡| 久久九九免费视频| 亚洲精品国产欧美| 亚洲视频在线播放| 国产欧美va欧美va香蕉在线| 亚洲老头老太hd| 亚洲天堂精品在线| 欧日韩不卡在线视频| 综合久久五月天| 国产精品美女久久| 日韩国产中文字幕| 久久久噜噜噜久久中文字免| 日韩色av导航| 性欧美视频videos6一9| 精品人伦一区二区三区蜜桃网站| 欧美有码在线视频| 久久精品夜夜夜夜夜久久| 日本欧美爱爱爱| 国产精品亚洲网站| 2020国产精品视频| 97在线观看免费| 国产男人精品视频| 亚洲国产中文字幕在线观看| 国产精品一区久久| 综合网日日天干夜夜久久| 日韩在线视频国产| 国产一区深夜福利| 97人人模人人爽人人喊中文字| 亚洲国产91色在线| 黑人巨大精品欧美一区二区一视频| 91在线色戒在线| 亚洲精品乱码久久久久久金桔影视| 日本a级片电影一区二区| 欧美风情在线观看| 亚洲午夜精品久久久久久性色| 国内揄拍国内精品少妇国语| 秋霞成人午夜鲁丝一区二区三区| 亚洲自拍小视频| 久久久久久久一区二区三区| 国产福利成人在线| 欧美日韩午夜视频在线观看| 久久久久久国产精品久久| 欧美尺度大的性做爰视频| xxxx性欧美| 精品日本美女福利在线观看| 91av在线播放视频| 久热精品视频在线观看| 亚洲欧美激情四射在线日| 国产suv精品一区二区三区88区| 91精品久久久久久久久久久久久久| 国产精品视频免费观看www| 久久久免费电影| 精品久久久久国产| 国产精品久久久久久影视| 欧美最猛性xxxxx亚洲精品| 亚洲精品一区中文字幕乱码| 国产精品ⅴa在线观看h| 最新国产精品亚洲| 姬川优奈aav一区二区| 亚洲一级一级97网| 久久精品99无色码中文字幕| 青青草原成人在线视频| 综合激情国产一区| 日本久久久久久久久久久| 久久久久久久久久久成人| 国产精品第8页| 欧美疯狂性受xxxxx另类| 91精品国产91久久久| 日韩在线免费视频| 欧美一级淫片丝袜脚交| 国产精品久久久久久久久久久不卡| 欧美最猛性xxxxx(亚洲精品)| 国产精品大陆在线观看| 国产主播喷水一区二区| 黑人与娇小精品av专区| 亚洲男女自偷自拍图片另类| 国产福利视频一区二区| 情事1991在线| 日韩一区在线视频| 国语自产精品视频在线看| 国产精品成人aaaaa网站| 久久精品成人欧美大片| 俺去啦;欧美日韩| 韩国美女主播一区| 日韩女在线观看| 久久久国产成人精品| 亚洲国产精品字幕| 91精品啪aⅴ在线观看国产| 亚洲黄色免费三级| 亚洲精品成a人在线观看| 国产精品十八以下禁看| 久久大大胆人体| 国产精品中文在线| 欧美日韩国产成人高清视频| 国产精品日韩在线播放| 久久精品久久久久久| 91成人在线视频| 精品国产一区二区在线| 国产精品视频在线观看| 久久伊人精品天天| 日韩有码在线视频| 亚洲欧美一区二区三区久久| 国产精品日韩在线| 欧美视频二区36p| 深夜福利日韩在线看| 久久久电影免费观看完整版| 91亚洲午夜在线| 日韩av在线一区| 久久精品国产欧美亚洲人人爽| 亚洲一区二区久久| 久久久久久一区二区三区| 亚洲人成电影网站色www| 亚洲成色777777女色窝| 日韩中文字幕不卡视频| 久久视频精品在线| 国产精品亚洲综合天堂夜夜| 自拍偷拍免费精品| 国产欧美精品xxxx另类| 午夜精品久久久久久99热| 亚洲人成在线一二| 岛国av一区二区| 精品国产91乱高清在线观看| 国产视频福利一区| 亚洲韩国欧洲国产日产av| 国产精品激情av电影在线观看| 国产精品爽爽爽| 日韩精品视频免费| 国产一区二区日韩| 91国产视频在线播放| 精品国产一区二区三区久久久| 成人综合网网址| 欧美专区第一页| 国产在线精品播放| 亚洲精品一区二区久| 欧美日韩一区二区在线播放| 黑人极品videos精品欧美裸| 欧美疯狂性受xxxxx另类| 欧美性生交xxxxx久久久| 国产一区二区三区直播精品电影| 日韩av免费一区| 欧美精品在线网站| 亚洲欧洲视频在线| 九九热这里只有精品6| 日韩欧美黄色动漫| 91国内揄拍国内精品对白| 国产91热爆ts人妖在线| 777777777亚洲妇女| 亚洲精品乱码久久久久久金桔影视| 欧美高清电影在线看| 亚洲精品久久久久久久久久久|