日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

javascript 参数检验(二):参数检查工具的完善

發(fā)布時間:2025/3/17 javascript 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javascript 参数检验(二):参数检查工具的完善 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

上一個版本的問題

接這篇文章,聊聊參數(shù)檢查工具 param-check 的完善。

按照之前的接口設(shè)計,鏈式調(diào)用表示“與”,參數(shù)表表示“或”,自然產(chǎn)生了一個問題——如果我要表達“(A與B)或(C與D)”這樣的邏輯組合應(yīng)該怎么辦?

以及,由于 not 調(diào)用只對它后面的第一個調(diào)用生效,那么如果我要實現(xiàn)“非(A與B)”,該怎么辦?

總結(jié)起來,實際上就是給邏輯表達式加括號的問題。

or 和 and 方法

為了自由表達與或關(guān)系,我們需要擴展一下規(guī)則。分析可知,函數(shù)調(diào)用的參數(shù)表是一個天然的括號,所以只用來表達“或”太奢侈了。我們添加方法 or 和 and,使之能表達與和或。但是這里有個問題,param-check 目前的接口都是即時計算的,如果你把調(diào)用串當做參數(shù)傳遞,沒有傳進去之前已經(jīng)計算完了,異常捕獲不到,沒法實現(xiàn)邏輯關(guān)系。比如:

check(a).or(check(a).gt(1).lt(3), check(a).gt(2).lt(4));

上面的代碼是沒法實現(xiàn) or 的。

解決方法比較容易想到的有兩個:

  • 改變接口模式,不再拋出異常,二是返回 false。這樣 or 和 and 就很容易實現(xiàn)了,但是鏈式調(diào)用就沒法實現(xiàn)了。

  • 提取 check 的調(diào)用路徑,使得一個檢查過程能保存在一個對象(高階函數(shù))里,當做參數(shù)傳到其它函數(shù)中,本質(zhì)上這是一種函數(shù)式編程方法。如果不考慮到書寫方便,這是很容易實現(xiàn)的:

    function myCheck(a) {check(a).gt(1).lt(3); }function myCheck2(a) {check(a).is('string'); }+function (a) {check(a).or(myCheck, myCheck2); }(2);
  • “使用鏈式調(diào)用記錄鏈式調(diào)用路徑”

    顯然上面的寫法非常不方便,所以我實現(xiàn)了一種更好用的接口,使用同樣的鏈式調(diào)用方式,實現(xiàn)調(diào)用路徑提取和參數(shù)緩存。具體的實現(xiàn)方式在這篇文章里。最終實現(xiàn)了這樣的效果:

    // 檢查 param 是否在區(qū)間(1,3) 與 (2,4) 的交集內(nèi) check(param, 'param').and(check.policy.gt(1).lt(3), check.policy.gt(2).lt(4));// 檢查 param 是否在區(qū)間(1,2) 與 (3,4) 的并集內(nèi) check(param, 'param').or(check.policy.gt(1).lt(2), check.policy.gt(3).lt(4));function myCheck(obj) {return obj.length > 4; }// 檢查 param 是否是數(shù)組并且長度大于 4 check(param, 'param').and(check.policy.is('array'), myCheck);// 檢查 param 是否*不是*[1,3]之間的偶數(shù)(即2) check(param, 'param').not.and(check.policy.is('number').not.lt(1).not.gt(3),function (obj) {return obj % 2 === 0;});

    總結(jié)

    以上是生活随笔為你收集整理的javascript 参数检验(二):参数检查工具的完善的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。