平時項目的開發不免遇到大量的邏輯判斷,因而我將一些經常使用的判斷封裝成了一個js類庫,judge.js
是我用業餘時間寫的一個js
判斷類庫,能夠用來判斷數據類型(isFunction,isObject,isJson,isArray
等),判斷瀏覽器內核,判斷移動和PC端瀏覽器名稱,判斷用戶設備類型(安卓設備,iOS設備等),判斷安卓IOS系統版本和作一些存在性信息校驗(郵箱,郵編,電話,手機等等),還能夠用於斷言。他的特色有:linux
AMD
& CommonJS
judge.js
一個用來作判斷的js類庫AMD
& CommonJS
$ npm install $ gulp compress
DEMO: http://hawx1993.github.io/jud...
使用npm
安裝judgejs
:
$ npm install judgejs
使用bower
安裝judgejs
$ bower install judgejs
var judge = require('judgejs'); judge.version =>0.7.0
能夠用$
來代替judge
。例如:android
require('../judge.js') $.version; => 0.7.0
judge.isArray(value)
judge.isArray(['foo','bar',{'name':'trigkit4'}]) => true
judge.isInt(num)
var num = 3.14; judge.isInt(num); =>false
judge.isError(value)
判斷給定值是不是Error
ios
judge.isJson(json)
判斷給定值是不是json
格式git
var str = '{"name":"jack"}'; judge.isJson(str);//false var json = JSON.parse(str); judge.isJson(json);//true
judge.isFunction()
判斷給定值是不是函數:github
var fn = new Function (); judge.isFunction(fn); =>true
judge.isString()
判斷一個給定的值是不是字符串,返回布爾值web
judge.isObject()
判斷一個給定的值是不是對象,返回布爾值;其中:array,object,number,string,null,function,boolean
被視爲對象,空字符串和undefined
爲非對象。chrome
var obj = Object.create(null); judge.isObject(obj);//true judge.isObject(undefined);//false
judge.isObjectLike(value)
判斷參數value是不是object-like
:npm
judge.isObjectLike([NaN]); =>true judge.isObjectLike(null); =>false
judge.type()
判斷值的類型,包括:json
array,object,number,string,null,undefined,function,boolean
gulp
var arr = new Array; judge.type(arr);//array var obj = {}; judge.type(obj);//object var num = Number(1); judge.type(num);//number var str = '123'; judge.type(str);//string var n = null; judge.type(n);//null var u = undefined; judge.type(u);//undefined var fn = function () {}; judge.type(fn);//function var bool = Boolean(); judge.type(bool);//boolean var proto = Object.prototype; judge.type(proto);//object function Person(){} var p1 = new Person(); judge.type(p1);//object
judge.isEqual()
判斷兩個給定值是不是嚴格相等:
var judge = require('judgejs'); var str = Boolean(true); var str2 = !!true; var str3 = true; var obj1 = {}; var obj2 = new Object(); var obj4 = Object.create(null); var foo = {name:'trigkit4'}; var bar = {age:23}; var baz = Object.assign(foo,bar); var obj3 = { name: 'trigkit4', age: 23 }; judge.isEqual(str,str2,str3);//true judge.isEqual(obj1,obj2,obj4);//false judge.isEqual(str,str2,str3);//true judge.isEqual(baz,obj3);//false,refer address different
judge.isChar()
判斷給定值是不是字符
judge.isRegExp(reg)
判斷給定值是不是RegExp對象:
var reg = /^(a,z)/i; judge.isRegExp(reg); => true judge.isRegExp('/[a-z]/'); =>false
judge.isLength(value)
判斷value
是不是有效的類數組長度
judge.isLength(Infinity); =>false var arr = Number([]); judge.isLength(arr); >true
judge.isWindow(obj)
判斷是不是window對象。
judge.isDocument()
判斷是不是Document對象
judge.isPlainObject(obj)
判斷obj
是不是純粹的對象,純粹的對象是經過{}
建立或者經過new Object()
建立
judge.isPlainObject(window); =>false var arr = Number([]); judge.isPlainObject(arr); =>false judge.isPlainObject(new Date()); =>false judge.isPlainObject({});//true
judge.isArrayLike(obj)
判斷obj
是不是類數組對象(類數組對象被限定爲擁有非負整數屬性的對象,NodeList,arguments,Array等):
judge.isArrayLike(document.body.children); =>true var obj = [{name:'null'}]; judge.isArrayLike(obj); =>true judge.isArrayLike(null); =>false
judge.isArrayLikeObject(value)
和judge.isArrayLike
相似,但isArrayLikeObject
會檢測value
是不是對象
judge.isArrayLikeObject('abcd');//false judge.isArrayLikeObject(document.body.children);//true
judge.isArguments(value)
判斷參數value是不是一個arguments
對象:
judge.isArguments(function(){ return arguments;}()) =>true
judge.isSet(value)
判斷給定值是否不爲null
和undefined
judge.idNumber(id)
判斷你的身份證號碼是否符合規範,其中X不區分大小寫:
var id = '35050019970323505x'; judge.idNumber(id); => true
judge.isOdd(num)
判斷給定值是不是奇數,返回布爾值
judge.min(a,b)
判斷給定的數值中誰是最小值,並返回最小值
judge.min(0,-1); =>-1
judge.isEven(num)
判斷一個給定的值是不是偶數,返回布爾值
$.isEven(null); =>false
judge.isNull(value)
judge.isNull(void 0); =>true judge.isNull(null); =>true
judge.isUndefined(value)
judge.isUndefined(null); =>false judge.isUndefined(void 0); =>true
judge.isNumber(num)
judge.isNumber(Infinity); =>true
judge.kernel()
用於檢測當前瀏覽器的內核(排版引擎),能夠檢測的類型以下:
webkit
,gecko
,trident
,edge
,opera
瀏覽器的內核分別用於檢測Chrome瀏覽器,Firefox瀏覽器,IE瀏覽器,Edge瀏覽器和Opera瀏覽器
if(judge.kernel() == 'webkit'){...} //引號處不能出現空格等不規範寫法
judge.platform()
檢測用戶當前設備,能夠檢測的類型以下:
android
,iPad
,ios
,windowsPhone
,mac
,windows
,linux
,blackBerry
,androidTablet
if(judge.platform() == "androidTablet"){...}
參數也如上所示,千萬不能寫錯,否則檢測就會出現錯誤。參數採用駝峯命名法
judge.browser()
檢測當前瀏覽器類型,能夠檢測的類型以下:
"IE6","IE7","IE8", "IE9", "IE10", "IE11","firefox","edge","sougou","liebao","liebao mobile","weixin","uc","mobile uc","baidu browser","mobile baidu","mobile qqbrowser","qqbrowser","opera","miui browser","oppo browser","mobile safari","android chrome", "ios chrome","chrome", "safari","ios safari","Mbile IE各個版本"
如需匹配不一樣平臺的瀏覽器,需用judge.platform()
再作一次匹配,使用場景能夠是:
1.若是沒有傳入參數,則返回瀏覽器的名稱,如:
judge.browser();//你的瀏覽器是Chrome的話 =>Chrome
2.傳入參數的狀況下,返回布爾值,如:
judge.browser("isChrome"); =>true
參數以下所示,採用駝峯命名法:
"isFirefox","isIosChrome","isIpadSafari", "isEdge", "isSougou","isLiebao", "isLiebaoMobile","isWeiXin","isUC", "isUCMobile", "isBaidu", "isBaiduMobile", "isQQMobile","isQQBrowser", "isOpera", "isMiuiBrowser", "isOppoBrowser","isAndroidChrome","isChrome","isIosSafari","isSafari" 其中UC瀏覽器採用固定大寫的寫法。因爲有的移動端瀏覽器採用和瀏覽器不一樣的ua,因此不能共用(沒法單純加一個`judge.isMobile()` or `judge.platform()=='android'`)。 //IE "isIE","isMobileIE+數字(如:isMobileIE10)","isIE+數字(6~11),如isIE10" //for example judge.browser("isIE11");//true,若是你的瀏覽器是IE11的話
judge.iosVersion()
判斷iOS
系統版本號,返回數字形式的版本號:
judge.iosVersion(); =>9.0.2
judge.androidVersion()
同上
judge.isChromium()
判斷用戶的瀏覽器是不是套着chrome
內核的瀏覽器,返回布爾值
judge.isMobile()
判斷用戶設備是不是移動設備(ipad,iphone,ipod,android)
judge.isPc()
判斷用戶設備是不是PC
judge.iosDevice()
檢測iPhone
手機設備類型,能夠檢測以下類型的iPhone
手機:
iphone4(s) ,iphone5(s), iphone6(s),iphone6(s)Plus if(judge.iosDevice=='iphone6Plus'){...}
參數爲:iphone4,iphone5,iphone6,iphone6Plus
$.iosDevice();//if your ios device is iphone6 =>iphone6
judge.androidDevice()
檢測安卓設備,如今只支持:mi4,魅族metal(mz-metal),魅族mx5,魅族mx3
TODO:準備支持更多安卓手機設備
judge.isTouchDevice()
判斷用戶當前設備是不是觸屏設備,返回布爾值Boolean
judge.isExist(value)
var str = null; judge.isExist(str) =>false var str = ''; judge.isExist(str) =>false
judge.lt(val1,val2)
判斷val1
是否小於val2:
judge.lt(1,-2); =>false
judge.inArray(val,arr)
判斷參數val
是否存在arr
數組內:
var val = [{'name':'huang'},123], arr = [val,456]; judge.inArray(val,arr); =>true
judge.email(em)
判斷是否符合Email
規範:
var email = 'hwx.trigkit4@163.com'; judge.email(email); =>true var email2 = 'hwx.trigkit.@gmail.com'; judge.email(email2); =>false
judge.hasLowerCase()
判斷是否含有小寫字母:
var str ='trigkit4'; judge.hasLowerCase(str);
judge.hasNumber()
判斷給定值是否含有數字:
var num ='trigkit4'; judge.hasNumber(num); =>true
judge.hasCaptial()
判斷是否含有大寫字母:
var str ='trigkit4'; judge.hasCapital(str);
judge.isBrowser()
判斷當前客戶端是不是瀏覽器,返回布爾值
judge.size(val)
判斷給定值的大小,返回數值:
var val = '琅琊榜lyb'; judge.size(val); =>6
judge.isHttps()
判斷當前站點是不是HTTPS,返回布爾值
judge.isUnique()
判斷一個給定數組的元素的值是否惟一:
var a = [1,2]; var arr = [1,2,3,4,a];//[1,2,3,4,[1,2]]; judge.isUnique(arr);//true var arary = ['1',1]; judge.isUnique(array);//true
judge.hasClass()
判斷給定值是否有class
judge.qqNumber()
判斷給定值是否符合QQ號規範,返回布爾值:
var qq = 345812345; judge.qqNumber(qq); =>true
judge.phoneNumber
判斷給定值是否符合手機號規範:
var num = 17755503789; judge.phoneNumber(num); =>true
judge.telPhone(num)
判斷電話號碼是否符合規範
judge.includeChinese
判斷給定值是否含有中文字符:
var ch = 'js腳本'; judge.includeChinese(ch); => true
judge.onlyChinese(ch)
判斷給定字符是否僅有中文字符:
var ch = 'zh中國'; judge.onlyChinese(ch); =>false
judge.onlyNumber()
判斷給定值是否只含有數字:
var s = '233'; judge.onlyNumber(s); =>true
judge.isElement(element)
判斷給定元素是不是DOM元素,返回布爾值
var div = document.createElement('div'); judge.isElement(div); =>true
judge.assert(value,desc)
你可使用judge.assert
去斷言你想要斷言的值,若是該值經過斷言,描述不符將變爲綠色,不然變爲紅色;
function add(a,b){ return a + b; } var a = 1,b=2; judge.assert(add(1,2) === 3,'true'); judge.assert(add(2,3) === 6,'false');
在參數desc
部分去填寫你的測試描述
judge.hasHash(url)
判斷一個給定的url是否有哈希值
var url = 'www.baidu.com#w'; judge.hasHash(url); => true
judge.has(obj,key)
判斷obj
是否有包含給定的鍵(key)
var obj ={ name:'trigkit4' }; judge.has(obj,'name'); =>true
judge.isUrl(url)
判斷一個給定的值是不是URL
var url = 'www.jd.d'; judge.isUrl(url); =>false
judge.zipCode(code)
判斷給定值是否符合郵編規範:
var zipcode = 362014; judge.zipCode(zipcode); =>true
judge.include(str,substr)
var str = 'microsoft'; var substr = 'soft'; judge.include(str,substr); =>true
judge.isOnline()
可用於判斷設備是否聯網,判斷斷網可用judge.isOnline==false
,返回true,即斷網
judge.hasSpecialChar()
判斷是否含有特殊字符,除了大小寫字母、數字和漢字之外的字符都被視爲特殊字符
var char = 'a!@#$%'; judge.hasSpecialChar(char); =>true
judge.isEmpty()
判斷給定值是否爲空,null
和undefined
被視爲空,
數字0
被視爲非空
var arr = [];//judge.isEmpty(arr); => true var n = null;//judge.isEmpty(n); => true var u = undefined;//judge.isEmpty(u); => true var num = 0;//judge.isEmpty(num); => false var obj = Object.create(null);//judge.isEmpty(obj); => true var str = '';//judge.isEmpty(str); => true
judge.position(element,parent)
判斷DOM元素位置,若只傳入element
參數,則返回其距離瀏覽器窗口的位置;
若傳入parent
參數,則返回其距離父元素的位置。兼容IE瀏覽器
@{param}:parent
可選
judge.position(element).top ;//判斷元素距離頂部位置 judge.position(element,parent).left;//判斷元素距離父元素左邊的位置
judge.isNativeFn(fn)
判斷fn
是不是原生方法,不能有括號
judge.isNativeFn(Object.assign); =>true var fn = new Function(); judge.isNativeFn(fn); =>false judge.isNativeFn(Array.prototype.filter) =>true var obj = { fn: function () {} }; judge.isNativeFn(obj.fn) =>false
judge.isIE8Plus(boolean)
判斷當前瀏覽器是不是IE8+ (包含IE8),直接返回布爾值
參數以下:
judge.isIE8Plus(true);//include IE8
judge.isIE8Plus(false);//exclude IE8
沒有參數,默認包含IE8
judge.strLength(str)
判斷字符長度,返回數字。一箇中文字符被視爲2,一個英文字符爲視爲1:
judge.strLength('你好China');//9
judge.isLeapYear(year)
判斷是不是閏年