在JavaScript中,进行精确的类型检查通常涉及使用typeof
运算符和instanceof
关键字。以下是一些实用的函数和方法,用于进行精确的类型检验:
- 使用
typeof
检查原始类型(例如:string
,number
,boolean
)。 - 使用
instanceof
检查对象的类型,特别是检查某个实例是否是构造函数的实例。 - 使用
Array.isArray()
检查数组类型。 - 使用
typeof
和Object.prototype.toString.call()
结合,检查复杂类型(例如:function
,object
,symbol
,bigint
)。
下面是一些示例代码:
function isString(value) {
return typeof value === 'string';
}
function isNumber(value) {
return typeof value === 'number';
}
function isBoolean(value) {
return typeof value === 'boolean';
}
function isFunction(value) {
return typeof value === 'function';
}
function isObject(value) {
return typeof value === 'object' && value !== null;
}
function isArray(value) {
return Array.isArray(value);
}
function isDate(value) {
return value instanceof Date;
}
function isRegExp(value) {
return value instanceof RegExp;
}
function isPrimitive(value, type) {
switch (type) {
case 'string': return isString(value);
case 'number': return isNumber(value);
case 'boolean': return isBoolean(value);
default: return false;
}
}
function isComplexType(value) {
return typeof value === 'object' && value !== null || typeof value === 'function';
}
function getType(value) {
const type = Object.prototype.toString.call(value);
return type.substring(8, type.length - 1);
}
// 使用示例
console.log(isString('hello')); // true
console.log(isNumber(123)); // true
console.log(isBoolean(true)); // true
console.log(isFunction(function() {})); // true
console.log(isObject({})); // true
console.log(isArray([])); // true
console.log(isDate(new Date())); // true
console.log(isRegExp(/regexp/)); // true
console.log(isPrimitive('test', 'string')); // true
console.log(getType(123n)); // "BigInt"
console.log(getType(Symbol('sym'))); // "Symbol"
这些函数可以帮助你精确地检查JavaScript中的变量类型。isPrimitive
用于检查原始类型,getType
用于获取更多种类的类型信息。这些方法可以根据需要进行扩展,以适应更多的特殊情况和复杂类型检查。