在 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
用于获取更多种类的类型信息。这些方法可以根据需要进行扩展,以适应更多的特殊情况和复杂类型检查。