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

錯誤剖析之JavaScript的9個陷阱及評點

 更新時間:2007年08月29日 19:20:05   作者:  
來自Nine Javascript Gotchas, 以下是JavaScript容易犯錯的九個陷阱。雖然不是什么很高深的技術(shù)問題,但注意一下,會使您的編程輕松些,即所謂make life easier. 筆者對某些陷阱會混雜一些評點。

1、最后一個逗號
如這段代碼,注意最后一個逗號,按語言學(xué)角度來說應(yīng)該是不錯的(python的類似數(shù)據(jù)類型辭典dictionary就允許如此)。IE會報語法錯誤,但語焉不詳,你只能用人眼從幾千行代碼中掃描。



2、this的引用會改變
如這段代碼:

[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]


并不如你所愿,答案并不是”JavaScript rules”。在執(zhí)行MyObject.ClickHandler時,代碼中紅色這行,this的引用實際上指向的是document.getElementById("theText")的引用??梢赃@么解決:

[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]

實質(zhì)上,這就是JavaScript作用域的問題。如果你看過,你會發(fā)現(xiàn)解決方案不止一種。

3、標(biāo)識盜賊
在JavaScript中不要使用跟HTML的id一樣的變量名。如下代碼:



[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]

IE會報對象未定義的錯誤。我只能說:IE sucks.

4、字符串只替換第一個匹配
如下代碼:



而實際上,結(jié)果是”This_is a title“. 在JavaScript中,String.replace的第一個參數(shù)應(yīng)該是正則表達式。所以,正確的做法是這樣:


var fileName = "This is a title".replace(/ /g,"_");


5、mouseout有時意味著mousein
事實上,這是由于事件冒泡導(dǎo)致的。IE中有mouseenter和mouseleave,但不是標(biāo)準(zhǔn)的。作者在此建議大家使用庫比如YUI來解決問題。

6、parseInt是基于進制體系的
這個是常識,可是很多人給忽略了parseInt還有第二個參數(shù),用以指明進制。比如,parseInt("09"),如果你認(rèn)為答案是9,那就錯了。因為,在此,字符串以0開頭,parseInt以八進制來處理它,在八進制中,09是非法,返回false,布爾值false轉(zhuǎn)化成數(shù)值就是0. 因此,正確的做法是parseInt("09", 10). 

7、for...in...會遍歷所有的東西
有一段這樣的代碼:


var arr = [5,10,15]
var total = 1;
for ( var x in arr) {
   total = total * arr[x];
}

運行得好好的,不是嗎?但是有一天它不干了,給我返回的值變成了NaN, 暈。我只不過引入了一個庫而已啊。原來是這個庫改寫了Array的prototype,這樣,我們的arr平白無過多出了一個屬性(方法),而for...in...會把它給遍歷出來。所以這樣做才是比較安全的:


for ( var x = 0; x < arr.length; x++) {
   total = total * arr[x];
}

其實,這也是污染基本類的prototype會帶來危害的一個例證。

8、事件處理器的陷阱
這其實只會存在使用作為對象屬性的事件處理器才會存在的問題。比如window.onclick = MyOnClickMethod這樣的代碼,這會復(fù)寫掉之前的window.onclick事件,還可能導(dǎo)致IE的內(nèi)容泄露(sucks again)。在IE還沒有支持DOM 2的事件注冊之前,作者建議使用庫來解決問題,比如使用YUI:


YAHOO.util.Event.addListener(window, "click", MyOnClickMethod);

這應(yīng)該也屬于常識問題,但新手可能容易犯錯。

9、Focus Pocus
新建一個input文本元素,然后把焦點挪到它上面,按理說,這樣的代碼應(yīng)該很自然:


var newInput = document.createElement("input");
document.body.appendChild(newInput);
newInput.focus();
newInput.select();

但是IE會報錯(sucks again and again)。理由可能是當(dāng)你執(zhí)行focus()的時候,元素還不存在。因此,我們可以延遲執(zhí)行:


var newInput = document.createElement("input");
newInput.id = "TheNewInput";
document.body.appendChild(newInput);
setTimeout(function(){ //這里我使用閉包改寫過,若有興趣可以對比原文
 document.getElementById('TheNewInput').focus();
 document.getElementById('TheNewInput').select();}, 10);

在實踐中,JavaScript的陷阱還有很多很多,大多是由于解析器的實現(xiàn)不到位而引起。這些東西一般都不會在教科書中出現(xiàn),只能靠開發(fā)者之間的經(jīng)驗分享。謝天謝地,我們生活在網(wǎng)絡(luò)時代,很多碰到的問題,一般都可以在Google中找到答案。

相關(guān)文章

  • BootStrap模態(tài)框和select2合用時input無法獲取焦點的解決方法

    BootStrap模態(tài)框和select2合用時input無法獲取焦點的解決方法

    在bootstrap的模態(tài)框里使用select2插件,會導(dǎo)致select2里的input輸入框沒有辦法獲得焦點,沒有辦法輸入。怎么解決這個問題呢?下面小編給大家?guī)砹薆ootStrap模態(tài)框和select2合用時input無法獲取焦點的解決方法,一起看看吧
    2017-09-09
  • 微信小程序如何實現(xiàn)精確的日期時間選擇器

    微信小程序如何實現(xiàn)精確的日期時間選擇器

    這篇文章主要介紹了微信小程序如何實現(xiàn)精確的日期時間選擇器,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • js 數(shù)值項目的格式化函數(shù)代碼

    js 數(shù)值項目的格式化函數(shù)代碼

    數(shù)值項目的格式化函數(shù)代碼,需要的朋友可以參考下。
    2010-05-05
  • JavaScript動態(tài)插入script的基本思路及實現(xiàn)函數(shù)

    JavaScript動態(tài)插入script的基本思路及實現(xiàn)函數(shù)

    偶爾需要動態(tài)插入javascript代碼的需求,基本思路是動態(tài)創(chuàng)建一個script標(biāo)簽,設(shè)置其src屬性,type屬性等,需要的朋友可以參考下
    2013-11-11
  • event.srcElement 用法筆記e.target

    event.srcElement 用法筆記e.target

    event.srcElement 可以捕獲當(dāng)前事件作用的對象,如event.srcElement.tagName可以捕獲活動標(biāo)記名稱。
    2009-12-12
  • 巧用數(shù)組制作圖片切換js代碼

    巧用數(shù)組制作圖片切換js代碼

    這篇文章主要為大家詳細介紹了巧用數(shù)組制作圖片切換js實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • js獲取iframe中的window對象的實現(xiàn)方法

    js獲取iframe中的window對象的實現(xiàn)方法

    下面小編就為大家?guī)硪黄狫S獲得iframe中的window對象的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05
  • JavaScript中的函數(shù)模式詳解

    JavaScript中的函數(shù)模式詳解

    這篇文章主要介紹了JavaScript中的函數(shù)模式詳解,本文講解了創(chuàng)建函數(shù)的語法、函數(shù)表達式、命名函數(shù)表達式、函數(shù)的聲明、函數(shù)聲明與表達式、函數(shù)的提升、即時函數(shù)模式等內(nèi)容,需要的朋友可以參考下
    2015-02-02
  • 詳解JavaScript中Generator函數(shù)的使用

    詳解JavaScript中Generator函數(shù)的使用

    Generator 是 ES6 新增的一種函數(shù)類型,這篇文章主要來和大家詳細聊聊Generator函數(shù)的具體用法,文中的示例代碼講解詳細,感興趣的可以了解一下
    2023-06-06
  • bootstrap實現(xiàn)輪播圖效果

    bootstrap實現(xiàn)輪播圖效果

    這篇文章主要為大家詳細介紹了bootstrap實現(xiàn)輪播圖效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05

最新評論

平安县| 商水县| 沅陵县| 调兵山市| 工布江达县| 河津市| 定襄县| 小金县| 太谷县| 无锡市| 义乌市| 修文县| 三门县| 呼图壁县| 临潭县| 上蔡县| 呼玛县| 黎平县| 金昌市| 宁德市| 铁岭市| 富裕县| 镇康县| 喜德县| 赤峰市| 德庆县| 江华| 内乡县| 吴桥县| 韩城市| 辉县市| 阿图什市| 桂东县| 西乡县| 岫岩| 射阳县| 新竹县| 宿州市| 南宁市| 五大连池市| 腾冲县|