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

JavaScript小技巧 2.5 則

 更新時間:2010年09月12日 19:14:09   作者:  
在上一篇文章中的(偽)Lambda模塊中使用了幾個小技巧,現(xiàn)在我就把這幾個小技巧介紹一下
在前一篇博文中我介紹了一種可以讓JavaScript多少具備一點類似Lambda表達式的編程能力的辦法,但是由于要兼容于JavaScript的語法檢查,所以可以使用的場合也很有限。

不過有些比較細心的朋友可能發(fā)現(xiàn)了,我在那個(偽)Lambda模塊中使用了幾個小技巧,現(xiàn)在我就把這幾個小技巧介紹一下:

1、使用new Function來進行語法檢查。

嘗試寫框架的同學(xué)們一定對此感受頗深:有的時候通過代碼產(chǎn)生的代碼可能因為技術(shù)上的失誤而產(chǎn)語法錯誤,導(dǎo)致運行過程中異常中斷;有的時候需要接受用戶的輸入,但用戶可能有意或者無意地寫入有誤的語句或表達式。
有些同學(xué)為了解決這種問題特意去編寫(或者使用現(xiàn)成的)復(fù)雜的語法檢查過程——但編寫用來分析代碼語法的代碼是一件極其痛苦的事情,一旦發(fā)現(xiàn)問題調(diào)整起來也非常不方便。
其實這個問題有簡單一點的解決辦法,就是使用腳本引擎自己的語法檢查,比方說eval或者new Function——當(dāng)然這個eval是不能亂用的,在不適當(dāng)?shù)臅r候用了eval的話整個程序都會出問題的;而new Function就沒這么大問題——雖然說new Function在任何情況下構(gòu)造的函數(shù)都是在全局作用域下直接工作的,但只是語法檢查的話并不會因為作用域問題而產(chǎn)生意外結(jié)果,只要你不真的直接調(diào)用通過它構(gòu)造的新函數(shù)。

2、在eval接受的參數(shù)前面增加“0,”。

其實這是由于IE中存在一個BUG。

出于某種神奇的原因,如果你在IE中想通過調(diào)用eval來動態(tài)地構(gòu)造一個函數(shù)的話,如果只是在函數(shù)的表達式兩邊增加括號——例如:
復(fù)制代碼 代碼如下:

eval('(function(){ /* code here */ })');


得到的返回也仍然是undefined,而其它瀏覽器則會正確地返回這個新構(gòu)造的函數(shù)的引用。
經(jīng)過小小的探索之后,我發(fā)現(xiàn)最簡單有效的解決問題的辦法就是在前邊加上“0,” ,這樣就在所有(或者說,至少是現(xiàn)在的五大主流)瀏覽器中都能得到預(yù)期結(jié)果了。
復(fù)制代碼 代碼如下:

eval('0,function(){ /* code here */ }');

注:在IE9的Chakra引擎中這個問題已經(jīng)解決了~

3、使用數(shù)組對象的concat方法來產(chǎn)生新數(shù)組。

認真的說這個應(yīng)該屬于JavaScript的常識,畢竟這個方法的用法在任何一個JavaScript語言功能參考上都能找到。
但是可能有些同學(xué)總是想不起來什么時候可以用它。
在我的(偽) Lambda模塊中,我很無聊地編寫了一個可以把一個引用/值以多種別名同時附加在多個對象上的函數(shù),這個函數(shù)既可以接受一個對象作為參數(shù),也可以接受包含一系列對象的數(shù)組作為參數(shù)。
由于這個函數(shù)被調(diào)用的次數(shù)比較少,所以我決定用(不一定效率最好,但)簡單有效的辦法來適應(yīng)兩種情況,也就是把單個對象參數(shù)轉(zhuǎn)化為只包含一個元素的數(shù)組再來處理,我選擇了用“[].concat(o)”的形式。
如果你有閱讀我的代碼,你可能會發(fā)現(xiàn)注釋中還包含了另一種方式,也就是“if (!(o instanceof Array)) o = [o]” ——后來我想了想,覺得一來不夠嚴謹(和ECMAScript 5中的isArray相比),二來調(diào)用的次數(shù)比較少,性能提升也很有限,就選擇了前一種。
在閱讀本文的同學(xué)們,你們有沒有什么有趣的技巧可以分享給大家呢?

相關(guān)文章

  • 原生js實現(xiàn)購物車功能

    原生js實現(xiàn)購物車功能

    這篇文章主要為大家詳細介紹了原生js實現(xiàn)購物車功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • Spring Boot根據(jù)配置暴露接口的代碼實現(xiàn)

    Spring Boot根據(jù)配置暴露接口的代碼實現(xiàn)

    SpringBoot 在 org.springframework.boot.autoconfigure.condition 包下提供了很多 ConditionalOnXxx 格式的條件注解,這些類名起的非常好,很直觀的可以理解其功能,本示例要實現(xiàn)的效果:在非生產(chǎn)環(huán)境下暴露測試用的接口,需要的朋友可以參考下
    2024-11-11
  • uniapp圖片展示自適應(yīng)等比例縮放方法舉例

    uniapp圖片展示自適應(yīng)等比例縮放方法舉例

    這篇文章主要給大家介紹了關(guān)于uniapp圖片展示自適應(yīng)等比例縮放方法的相關(guān)資料,在uniapp頁面展示中會遇到圖片展示問題,等比縮放或者自適應(yīng)view大小,需要的朋友可以參考下
    2023-10-10
  • javascript實現(xiàn)日歷效果

    javascript實現(xiàn)日歷效果

    這篇文章主要為大家詳細介紹了javascript實現(xiàn)日歷效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • JS模擬實現(xiàn)串行加法器

    JS模擬實現(xiàn)串行加法器

    這篇文章主要為大家詳細介紹了JS模擬實現(xiàn)串行加法器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • JavaScript垃圾回收機制原理總結(jié)深入探究

    JavaScript垃圾回收機制原理總結(jié)深入探究

    就像人類會產(chǎn)生垃圾一樣,程序運行過程中也會產(chǎn)生垃圾,如果不及時回收輕則將會拖慢程序運行,重則會導(dǎo)致系統(tǒng)崩潰,也就是所謂的內(nèi)存泄漏。所以垃圾回收非常必要
    2022-10-10
  • 判斷iOS、Android以及PC端的示例代碼

    判斷iOS、Android以及PC端的示例代碼

    這篇文章主要給大家介紹了關(guān)于如何判斷iOS、Android以及PC端的相關(guān)資料,主要是利用navigator.userAgent來實現(xiàn),文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • 微信接入之獲取用戶頭像的方法步驟

    微信接入之獲取用戶頭像的方法步驟

    這篇文章主要介紹了微信接入之獲取用戶頭像的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • js實現(xiàn)模態(tài)框拖拽

    js實現(xiàn)模態(tài)框拖拽

    這篇文章主要為大家詳細介紹了js實現(xiàn)模態(tài)框拖拽效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • uniapp實現(xiàn)app自動更新詳細步驟

    uniapp實現(xiàn)app自動更新詳細步驟

    這篇文章主要給大家介紹了關(guān)于uniapp實現(xiàn)app自動更新的詳細步驟,文中給出了詳細的代碼示例以及圖文教程,對大家學(xué)習(xí)或者使用uniapp具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2023-08-08

最新評論

岚皋县| 八宿县| 皮山县| 威远县| 普定县| 共和县| 平度市| 合阳县| 公主岭市| 张家界市| 德惠市| 桐柏县| 沙坪坝区| 卢龙县| 波密县| 东台市| 贡嘎县| 东城区| 海城市| 云安县| 凌海市| 平泉县| 石河子市| 绵竹市| 景宁| 白水县| 雅安市| 天门市| 文成县| 延寿县| 抚松县| 太谷县| 郎溪县| 当涂县| 柳林县| 阜平县| 天水市| 门头沟区| 洛宁县| 容城县| 荆门市|