JavaScript检测之basevalidate.js

上篇文章「JavaScript检测原始值、引用值、属性」中涉及了大量有用的代码范例,为了让大家更方便的使用这些代码,博主特意把这些代码重新整理并托管到 GitHub,项目地址是:https://github.com/stone0090/base-validate,如果 basevalidate.js 对您有帮助,请帮忙在 GitHub 上 Star 该项目,谢谢大家。

basevalidate.js 包含 14个独立检测方法1个综合检测方法,示例代码如下:(如果大家还有其他需要,请在文章尾部的微信公众号中留言,我尽量为大家实现。)

basevalidate test

var Person = function(){  this.name = 'stone';  this.age = 30;}var person = new Person();var nums = [123, 456, 789];// 14个独立检测方法console.log(baseValidate.isString(null));console.log(baseValidate.isNumber(null));console.log(baseValidate.isBoolean(null));console.log(baseValidate.isUndefined(null));console.log(baseValidate.isNull(null));console.log(baseValidate.isObject(null));console.log(baseValidate.instanceOf(null));console.log(baseValidate.isFunction(null));console.log(baseValidate.isArray(null));console.log(baseValidate.isProperty(null));console.log(baseValidate.isOwnProperty(null));console.log(baseValidate.isDomProperty(null));console.log(baseValidate.isBomProperty(null));console.log(baseValidate.isEmpty(null));// 1个综合检测方法 baseValidate(value, object),等价于 baseValidate.validateAll(value ,object)console.log(baseValidate('123'));console.log(baseValidate(123));console.log(baseValidate(true));console.log(baseValidate(person, Person));console.log(baseValidate(nums));console.log(baseValidate('age', person));console.log(baseValidate('name', person));console.log(baseValidate(alert));console.log(baseValidate(document.getElementById));// 以下皆为 isEmpty() 方法为 false 的情况console.log(baseValidate()); // 不传参数,参数默认为 undefinedconsole.log(baseValidate(null));console.log(baseValidate(''));console.log(baseValidate(0));console.log(baseValidate(false));console.log(baseValidate({}));console.log(baseValidate([]));console.log(baseValidate(NaN));

测试结果如下:

不知道大家有没有发现,其中一个结果好像不太正确,console.log(baseValidate('name', person)) 为什么会输出 isBomProperty: true,这是因为window 对象中也有 name 属性,所以 name 也被认为是 BOM 的属性。

basevalidate.js 源码如下,由于博客不会实时更新,还请大家以 GitHub 源码为准。

/*

(function(window) {

var getFuncName = function(func) {    var funcName = String(func);    if (funcName.indexOf('function') > -1)        return funcName.replace(/^\s*function\s+(.+)\((\s|\S)+$/, '$1');    return func;};var validate = {    // 检测「字符串」    isString: function(value) {        return typeof value === 'string';    },    // 检测「数字」    isNumber: function(value) {        return typeof value === 'number';    },    // 检测「布尔值」    isBoolean: function(value) {        return typeof value === 'boolean';    },    // 检测「undefined」    isUndefined: function(value) {        return typeof value === 'undefined';    },    // 检测「null」    isNull: function(value) {        return value === null;    },    // 检测「对象」    isObject: function(value) {        return typeof value === 'object' || value instanceof Object;    },    // 检测「实例和对象的关系」    instanceOf: function(value, object) {        return typeof value === 'object' && typeof object === 'function' && value instanceof object;    },    // 检测「函数」    isFunction: function(value) {        return typeof value === 'function';    },    // 检测「数组」    isArray: function(value) {        if (typeof Array.isArray === 'function')            return Array.isArray(value);        else            return Object.prototype.toString.call(value) === '[object Array]';    },    // 检测「属性,包含原型链中的属性」    isProperty: function(value, object) {        return typeof object === 'object' && getFuncName(value) in object;    },    // 检测「实例属性,不包含原型链中的属性」    isOwnProperty: function(value, object) {        return typeof object === 'object' && 'hasOwnProperty' in object && object.hasOwnProperty(getFuncName(value));    },    // 检测「DOM 属性」    isDomProperty: function(value) {        return getFuncName(value) in window.document;    },    // 检测「BOM 属性」    isBomProperty: function(value) {        return getFuncName(value) in window;    },    // 检测「假值」    isEmpty: function(value) {        if (this.isFunction(value))            return false;        if (this.isUndefined(value))            return true;        if (this.isString(value) && value.replace(/(^\s*)|(\s*$)/g, '').length === 0)            return true;        if (this.isBoolean(value) && !value)            return true;        if (this.isNumber(value) && (value === 0 || isNaN(value)))            return true;        if (this.isObject(value)) {            if (value === null || value.length === 0)                return true;            for (var i in value) {                if (value.hasOwnProperty(i))                    return false;            }            return true;        }        return false;    },    // 检测全部    validateAll: function(value, object) {        var result = {};        if (this.isString(value, object)) result.isString = true;        if (this.isNumber(value, object)) result.isNumber = true;        if (this.isBoolean(value, object)) result.isBoolean = true;        if (this.isUndefined(value, object)) result.isUndefined = true;        if (this.isNull(value, object)) result.isNull = true;        if (this.isObject(value, object)) result.isObject = true;        if (this.instanceOf(value, object)) result.instanceOf = true;        if (this.isFunction(value, object)) result.isFunction = true;        if (this.isArray(value, object)) result.isArray = true;        if (this.isProperty(value, object)) result.isProperty = true;        if (this.isOwnProperty(value, object)) result.isOwnProperty = true;        if (this.isDomProperty(value, object)) result.isDomProperty = true;        if (this.isBomProperty(value, object)) result.isBomProperty = true;        if (this.isEmpty(value, object)) result.isEmpty = true;        return result;    }};var baseValidate = function(value, object) {    return validate.validateAll(value, object)};for (var v in validate) {    if (validate.isOwnProperty(v, validate))        baseValidate[v] = validate[v];}window.baseValidate = window.baseValidate || baseValidate;

}(window));
欢迎来到 石佳劼的博客,如有疑问,请在「原文」评论区 留言,我会尽量为您解答。

关键字:JavaScript

版权声明

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部