在每种编程语言中,数据验证都是我们在修改或显示数据前的必修课。
说到JavaScript,我们几乎天天都在用这些功能,为了快速复用,我们通常会把它们都放在一个实用类里。
废话不多说,直接上干货。
基本上,我们来看看这些类型的判定:
typeof 1;
'number'
typeof 1.2;
'number'
typeof NaN;
'number'
typeof false;
'boolean'
typeof '';
'string'
typeof function () {};
'function'
typeof undefined;
'undefined'
typeof null;
'object'
typeof {};
'object'
typeof [];
'object'
以这些为参考,咱们来写几个检查函数吧。
isNumber
const isNumber = value => typeof value === 'number' && !isNaN(value);
isNumber(1);
true
isNumber(1.2);
true
isNumber(-1);
true
isNumber(-1.2);
true
isNumber(01);
true
isNumber(00);
true
isNumber(Infinity);
true
isNumber(-Infinity);
true
isNumber(NaN);
false
isNumber(undefined);
false
isNumber(true);
false
isNumber('23');
false
isNumber(null);
false
isNumber('');
false
isNumber('23');
false
isNumber([]);
false
isNumber({});
false
isNumber(function () {})
false
如果想排除无穷大(Infinity
)和无穷小(-Infinity
),可以这么改逻辑:
const isNumber = value => typeof value === 'number' && !isNaN(value) && isFinite(value);
isNumber(Infinity);
false
isNumber(-Infinity);
false
isBoolean
const isBoolean = value => typeof value === 'boolean';
isBoolean(true);
true
isBoolean(false);
true
isBoolean('test');
false
isBoolean(1);
false
isBoolean(0);
false
isBoolean(undefined);
false
isBoolean(null);
false
isBoolean([]);
false
isBoolean(NaN);
false
isBoolean({});
false
isBoolean(function () {});
false
isString
const isString = value => typeof value === 'string';
isString('test');
true
isString(undefined);
false
isString(null);
false
isString({});
false
// 其他值返回 false,你也可以自己验证下。
isObject
const isObject = value => value !== null && !Array.isArray(value) && typeof value === 'object';
isObject({});
true
isObject(null);
false
isObject([]);
false
isArray
// 直接用 Array.isArray(value) 就行了。
const isArray = value => Array.isArray(value);
isArray([]);
true
isArray({});
false
isArray(null);
false
isFunction
const isFunction = value => typeof value === 'function';
isFunction(function() {});
true
isFunction(null);
false
isFunction(undefined);
false
isFunction({});
false
isInteger
我们可以直接用 Number.isInteger(value)
。
当然了,根据使用场景不同,这些函数可能还有些特殊情况。
如果我发现漏了什么关键的验证,请务必告诉我,一起完善这些检查函数。
希望这些小技巧能帮到你,至少比满世界找长篇大论的解释来得轻松愉快些 😝。
感谢阅读!祝你阅读愉快 😃