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

JavaScript小技巧 2.5 則

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

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

1、使用new Function來進(jìn)行語法檢查。

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

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

其實(shí)這是由于IE中存在一個(gè)BUG。

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

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


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

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

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

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

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

相關(guān)文章

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

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

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

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

    SpringBoot 在 org.springframework.boot.autoconfigure.condition 包下提供了很多 ConditionalOnXxx 格式的條件注解,這些類名起的非常好,很直觀的可以理解其功能,本示例要實(shí)現(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實(shí)現(xiàn)日歷效果

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

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

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

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

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

    就像人類會產(chǎn)生垃圾一樣,程序運(yùn)行過程中也會產(chǎn)生垃圾,如果不及時(shí)回收輕則將會拖慢程序運(yù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來實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • 微信接入之獲取用戶頭像的方法步驟

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

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

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

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

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

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

最新評論

合作市| 达日县| 比如县| 桓台县| 上栗县| 汕头市| 和平区| 临夏县| 林芝县| 宁强县| 东城区| 曲水县| 桂阳县| 余江县| 金平| 礼泉县| 镇平县| 萝北县| 岚皋县| 富顺县| 绥芬河市| 右玉县| 和田县| 安吉县| 萨迦县| 虎林市| 遂平县| 灌南县| 赤城县| 淳化县| 武强县| 丰顺县| 凤阳县| 保山市| 托克逊县| 疏附县| 启东市| 乐陵市| 南靖县| 娄底市| 隆化县|