成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

菜鳥必看:這些年我們愛犯的弱智錯(cuò)誤

開發(fā) 前端
這篇文章肯定無法幫助你應(yīng)付面試(面試一般不會(huì)考你“弱智錯(cuò)誤”的),也肯定不會(huì)讓你的技術(shù)水平得到深入的提高(弱智錯(cuò)誤一般和你使用的技術(shù)深淺無關(guān)),但應(yīng)該能讓你在調(diào)試代碼的過程中提高效率(更多是一種習(xí)慣 或者說還是“細(xì)節(jié)決定成敗”),如果能對(duì)這些弱智錯(cuò)誤牢記心間的話,當(dāng)你遇到那些怎么改都改不對(duì)的時(shí)候,就要想想“是不是我犯了弱智錯(cuò)誤??”,所以本篇文章主要獻(xiàn)給菜鳥們,對(duì)于老手來說,歡迎多多提供自己的經(jīng)驗(yàn)教訓(xùn),讓菜鳥們能夠更快的成長起來。

做了開源以后,最大的感觸就是:溝通增加了,信息來源增加了。提問的朋友很多,各種問題都會(huì)有,有時(shí)候在解答時(shí)也是很郁悶,這兩天感覺適當(dāng)總結(jié)一下自己以及周圍朋友在制作 js 時(shí)愛犯的弱智錯(cuò)誤,還是很有必要的。這些弱智錯(cuò)誤經(jīng)常會(huì)讓我們抓狂——這么簡單的東西怎么就是總出錯(cuò)呢?反復(fù)檢查好幾遍就是找不到錯(cuò)誤,一旦你恍然大悟時(shí),必然會(huì)驚呼:啊!太弱智了。。。。

這篇文章肯定無法幫助你應(yīng)付面試(面試一般不會(huì)考你“弱智錯(cuò)誤”的),也肯定不會(huì)讓你的技術(shù)水平得到深入的提高(弱智錯(cuò)誤一般和你使用的技術(shù)深淺無關(guān)),但應(yīng)該能讓你在調(diào)試代碼的過程中提高效率(更多是一種習(xí)慣 或者說還是“細(xì)節(jié)決定成敗”),如果能對(duì)這些弱智錯(cuò)誤牢記心間的話,當(dāng)你遇到那些怎么改都改不對(duì)的時(shí)候,就要想想“是不是我犯了弱智錯(cuò)誤??”,所以本篇文章主要獻(xiàn)給菜鳥們,對(duì)于老手來說,歡迎多多提供自己的經(jīng)驗(yàn)教訓(xùn),讓菜鳥們能夠更快的成長起來。

閑言少敘,直接看正文:

No.1 大小寫不一致

把這個(gè)弱智錯(cuò)誤名列榜首,可是當(dāng)之無愧,從菜鳥到高手,能有幾人逃得過?

錯(cuò)誤描述:一會(huì)兒用 id、pid;一會(huì)兒又是 Id、pId。當(dāng)然要亂套了。

避免辦法:養(yǎng)成良好的命名習(xí)慣很重要。看著文檔做功課時(shí)要仔細(xì)。

No.2 輸入錯(cuò)誤

其實(shí)這個(gè)錯(cuò)誤和大小寫不一致類似。

錯(cuò)誤描述:輸入變量時(shí)左右手指出現(xiàn)了節(jié)奏時(shí)差,變量名中某兩個(gè)字母站錯(cuò)了位置,本來應(yīng)該輸入 function 結(jié)果一不小心輸入了 fucntion,如果不仔細(xì)看怎么看怎么對(duì)。另外多個(gè)字母少個(gè)字母的情況也時(shí)有發(fā)生。

避免辦法:敲代碼時(shí)要盡量集中精神,避免三心二意。檢查錯(cuò)誤時(shí)可以把正常的代碼和錯(cuò)誤部分的代碼粘貼到一起,對(duì)比查看,往往很容易能夠發(fā)現(xiàn)這種錯(cuò)誤。(推薦多玩玩兒“找不同”,也會(huì)不同程度的提升糾錯(cuò)能力)

  1. <span style="font-size: x-small;">//兩行放在一起對(duì)比,是不是一眼就能看出來錯(cuò)誤的地方呢?  
  2. var children = function() { var _this = this; var iCounter = 0;  iCounter++;}  
  3. var children = funtcion() { var _this = this; var iCounter = 0;  icounter++;}</span> 

No.3 多余的逗號(hào)

相信10個(gè)人中至少有8個(gè)人犯過這種錯(cuò)誤。

錯(cuò)誤描述:主要是對(duì)于 JSON 對(duì)象中,最后一個(gè)對(duì)象后面仍保留一個(gè)逗號(hào)。這種情況下對(duì)于 firefox、chrome 等瀏覽器來說運(yùn)行起來一切正常,可是放到 ie 上就報(bào)錯(cuò),再加上 ie 還很難調(diào)試,所以對(duì)于菜鳥來說往往很難找到源頭。

舉例: {"a":1, "b":2, "c":3,}

出現(xiàn)這種錯(cuò)誤最常見的情況就是在 Server 端利用循環(huán)語句批量生成 JSON 數(shù)據(jù)字符串的時(shí)候。

避免辦法:這個(gè)的確沒有太好的辦法徹底避免,只能是讓你的腦子里多一根經(jīng),一旦批量制作 JSON 格式的內(nèi)容時(shí),就要小心最后面是不是會(huì)多一個(gè)逗號(hào)。

No.4 數(shù)組的長度

錯(cuò)誤描述:關(guān)于數(shù)組的使用時(shí),總會(huì)時(shí)不時(shí)的出現(xiàn)一些下標(biāo)越界 或者 null 方面的錯(cuò)誤。

舉例:某個(gè) function 中一段代碼 a[0] = a[1]+1; 大部分時(shí)候正常,但偶爾會(huì)出現(xiàn)錯(cuò)誤。

避免辦法:產(chǎn)生這個(gè)錯(cuò)誤一般來說是沒有養(yǎng)成使用數(shù)組時(shí)要首先對(duì) 數(shù)組對(duì)象進(jìn)行檢查的習(xí)慣,例如首先判斷 a!=null; 另外還要判斷 a.length 是否滿足你需要用到的 index 值。這個(gè)就是個(gè)習(xí)慣問題。

No.5 詭異的計(jì)數(shù)器

這是一個(gè) zTree 中曾經(jīng)犯下的弱智錯(cuò)誤,但由于原先使用多棵樹的用戶并不多,所以很長時(shí)間都沒有暴露出來。

錯(cuò)誤描述:有一個(gè)全局變量用于計(jì)數(shù),但有多個(gè)不同的地方都在使用這一個(gè)計(jì)數(shù)器,當(dāng)其中某處忘記了其他地方還在使用這個(gè)計(jì)數(shù)器時(shí),可能會(huì)對(duì)其進(jìn)行清零重置。。OMG,這樣可就糟糕了吧,別的地方因?yàn)橛?jì)數(shù)器歸零會(huì)容易導(dǎo)致某些值沖突。

避免辦法:對(duì)于全局變量的使用要規(guī)范,對(duì)于改變?nèi)肿兞康牡胤皆缴僭胶茫蛘叻庋b成固定的方法,要清楚全局變量的作用,修改時(shí)一定要慎重。

No.6 難以理解的等式

寫代碼就少不了 if;你在使用 if 的時(shí)候是否總會(huì)出現(xiàn)莫名其妙的結(jié)果呢? 看看下面這段代碼的結(jié)果,比較一下 a/b 的等式結(jié)果吧:

  1. <span style="font-size: x-small;">var a = 0;  
  2. var b = "0";  
  3.  
  4. if (a) {console.log(1);}              // false  
  5. if (!!a) {console.log(2);}           //  false  
  6. if (b) {console.log(3);}             //  true  
  7. if (!!b) {console.log(4);}           //  true  
  8. if (a == false) {console.log(5);}    // true  
  9. if (!!a == false) {console.log(6);} //  true  
  10. if (b == false) {console.log(7);}    //  true  
  11. if (!!b == true) {console.log(8);}  //  true</span> 

錯(cuò)誤描述:對(duì)于 number 和 string 在 if 表達(dá)式中,如果值是 0 或 "0" 時(shí)總會(huì)讓你措手不及。

避免辦法:建議對(duì)于非 boolean 對(duì)象的在判定時(shí)采用 !! 進(jìn)行標(biāo)準(zhǔn)的 boolean 轉(zhuǎn)換,同時(shí)要記住 js 中對(duì)于 0 這個(gè)特殊情況的判定,再結(jié)合你的需求編寫正確的判定表達(dá)式。

No.7 JSON 對(duì)象的理解

有的初學(xué)者對(duì)于 server 端的對(duì)象能夠爭取理解,但是放到 js 中時(shí)往往開始變得糊涂了。

錯(cuò)誤描述:錯(cuò)誤的認(rèn)為只要 {}里面的內(nèi)容相同,那么這兩個(gè)對(duì)象就是一樣的。

舉例:認(rèn)為 var a = {"id":1}; var b = {"id":1} 那么 a == b (正確答案: a != b)

避免辦法:需要正確理解 JSON 對(duì)象的定義。 每次 {} 就相當(dāng)于生成一個(gè)新的 JSON 對(duì)象。

No.8 js 文件加載順序

你是不是出現(xiàn)過js 文件都加載了,可是還總報(bào) undefined 的錯(cuò)誤呢?

錯(cuò)誤描述:由于先加載了使用某個(gè)對(duì)象的代碼,后加載了定義該對(duì)象的代碼,導(dǎo)致報(bào)錯(cuò)。

舉例:

  1. <span style="font-size: x-small;">// a.js 文件  
  2. function a() {return "a";}  
  3.  
  4. // b.js 文件  
  5. alert(a());</span> 

避免辦法:牢記先要定義對(duì)象,然后才能使用對(duì)象,確保 js 文件的加載順序。

No.9 瀏覽器的兼容問題

前兩天看到一句話,大概意思是:“作為一個(gè) 前端 程序員來說,很少有人能夠如此幸運(yùn)——只兼容一款瀏覽器”。

錯(cuò)誤描述:在某個(gè)瀏覽器下調(diào)整的好好的,怎么換個(gè)瀏覽器就不好使了??

避免辦法:如果讓你完全牢記所有會(huì)出現(xiàn)兼容問題的代碼,貌似不太現(xiàn)實(shí)。一般來說只能記住一些常用的,或者是利用 jQuery 等架構(gòu)減輕遇到這些問題的可能性。再有就是要提高警惕,一旦出現(xiàn)此類情況,就要考慮一下是不是因?yàn)?js 的兼容問題造成的呢?(然后就去 google 一下,如果被墻了,那么就去百度吧!呵呵)

補(bǔ)充:在不少情況下,往往是 css 的兼容出現(xiàn)了錯(cuò)誤,讓你誤以為是 js 的錯(cuò)誤。

No.10 異步加載的疏忽(一)

對(duì)于一個(gè)菜鳥來說,對(duì)于異步加載的理解很關(guān)鍵,也是一個(gè)經(jīng)常容易犯錯(cuò)誤的地方。

錯(cuò)誤描述:用 Ajax 去給某個(gè)對(duì)象賦值,緊接著 Ajax 的代碼后面就執(zhí)行了使用這個(gè)對(duì)象的代碼。然后你就會(huì)發(fā)現(xiàn)明明 Ajax 返回的結(jié)果是正確的,為何還不能正常執(zhí)行呢??

避免辦法:對(duì)于需要確保 Ajax 執(zhí)行完畢后才能執(zhí)行的代碼,一定要在 Ajax 的 success 和 error 這兩個(gè)回調(diào)函數(shù)中進(jìn)行。絕對(duì)不能緊跟在 Ajax 的代碼后面立刻執(zhí)行。 一定要深刻理解“異步加載”的含義,以及它最簡單的工作原理。

No.11 異步加載的疏忽(二)

上面說了一定要在 Ajax 的 success 和 error 這兩個(gè)回調(diào)函數(shù)中執(zhí)行必要代碼,success 不就可以了,為何還要在 error 中執(zhí)行呢??

錯(cuò)誤描述:對(duì)于某些在 Ajax 前設(shè)定的標(biāo)識(shí),只在 Ajax 的 success 中修改標(biāo)識(shí),會(huì)發(fā)現(xiàn)一旦 server 或 網(wǎng)絡(luò)異常導(dǎo)致 Ajax 出錯(cuò)時(shí),就會(huì)出現(xiàn)一些很難理解的錯(cuò)誤現(xiàn)象。

舉例:

  1. <span style="font-size: x-small;">//這段代碼簡單的實(shí)現(xiàn)避免同時(shí)多個(gè) ajax 執(zhí)行的代碼,只有當(dāng) ajax 完成后才能重新 ajax  
  2. //一旦ajax過程出現(xiàn)錯(cuò)誤后,這段代碼將導(dǎo)致 goAjax 永遠(yuǎn)不會(huì)再進(jìn)行 ajax 調(diào)用  
  3. var a = true;  
  4.  
  5. function goAjax() {  
  6.   if (a) {  
  7.     a = false;  
  8.     //這里用 jQuery 的 ajax 調(diào)用舉例  
  9.     $.ajax({  
  10.        success: function(msg) {  
  11.            a = true;  
  12.        }  
  13.  
  14.     });  
  15.   }  
  16. }</span> 

避免辦法:對(duì)于必要的標(biāo)識(shí),一定要在 error 中設(shè)置相應(yīng)的數(shù)據(jù)恢復(fù),避免由于 ajax 異常導(dǎo)致程序邏輯錯(cuò)誤。

例如上面的代碼需要增加:

  1. error: function() { a = true;} 

No.12 jQuery 搜索DOM對(duì)象是否存在的判定

這是一個(gè)剛使用 jQuery 時(shí)非常容易犯的錯(cuò)誤。

錯(cuò)誤描述:var a = $("#test"); if(!!a) {alert("ok!");} 運(yùn)行這段代碼你會(huì)發(fā)現(xiàn),永遠(yuǎn)都會(huì) alert,不管是否存在 id = "test" 的DOM

避免辦法:jQuery 的 $ 方法查找對(duì)象,始終都會(huì)返回一個(gè) jQuery 對(duì)象的,不管是否存在查找的結(jié)果。檢查是否有結(jié)果請(qǐng)利用 length 屬性,比如 if(a.length>0) {alert("ok!");}

原文:http://www.iteye.com/topic/1120928

【編輯推薦】

  1. 再談JavaScript面向?qū)ο缶幊?/a>
  2. 使用jQuery和CSS3實(shí)現(xiàn)的超炫3D畫廊特效
  3. 前端必備:jQuery 1.7.1API手冊(cè)
  4. 寫代碼如坐禪:你是哪一類程序員?
  5. Node.js不是銀彈 但它仍然是顆子彈
責(zé)任編輯:陳貽新 來源: iteye
相關(guān)推薦

2012-03-14 15:34:14

PaaS

2015-02-13 15:00:48

騰訊15年

2019-09-20 16:44:19

人工智能AI

2015-04-20 10:03:59

云計(jì)算業(yè)務(wù)部署

2013-07-26 15:29:56

項(xiàng)目管理

2014-08-06 14:13:30

Windows Pho

2017-11-02 15:42:32

開發(fā)錯(cuò)誤代碼

2012-10-30 17:40:00

產(chǎn)品Minefold開發(fā)

2022-02-10 14:38:28

前端框架瀏覽器

2022-05-07 23:54:59

windows操作系統(tǒng)應(yīng)用軟件

2020-09-02 07:04:03

TS TypeScriptwindow

2021-09-12 22:22:15

前端

2022-08-23 12:21:50

Linux命令

2014-11-03 10:49:43

程序員技術(shù)

2012-08-31 17:13:16

SuSE

2015-04-28 10:35:01

設(shè)計(jì)

2021-02-06 10:30:12

人工智能

2021-02-05 23:29:20

人工智能機(jī)器學(xué)習(xí)技術(shù)

2019-11-11 22:37:35

Google收購失敗

2015-10-09 11:24:16

蘋果微軟斗爭
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 日韩一级免费大片 | 精品国产一级 | 久久精品日产第一区二区三区 | 亚洲视频一区二区三区四区 | 亚洲精品久 | 国产精品一区二区视频 | 日韩精品一区二区三区免费视频 | 亚洲视频国产 | 精品三级在线观看 | 国产精品一区二区av | 精品国产一区二区三区性色av | 亚洲高清视频一区二区 | 成人在线视频免费观看 | 91精品入口蜜桃 | 中文字幕日韩在线观看 | 韩国欧洲一级毛片 | a在线观看免费 | 一级a爱片性色毛片免费 | 日韩成人免费av | 国产美女特级嫩嫩嫩bbb片 | 久久久久99| 人妖av | 国产综合久久 | www国产精 | 在线成人免费视频 | 日韩三级电影一区二区 | 欧美一区二区三区视频在线观看 | 国外成人在线视频网站 | 99久久婷婷国产综合精品电影 | 日韩视频一区二区 | 日本三级电影在线看 | 久久国产视频网 | 国产精品一区二区不卡 | 九九热在线观看视频 | 一级毛片黄片 | 国产精品久久av | 国内精品久久久久 | 国产欧美精品区一区二区三区 | 久久久国产一区二区三区 | 成人国产精品久久久 | 欧美久久精品一级黑人c片 91免费在线视频 |