typeof无法准确区分null、数组、日期等对象类型,需配合Object.prototype.toString.call()或Array.isArray等方法;其返回值包括”number”、”string”、”boolean”、”undefined”、”function”、”symbol”、”bigint”及统一的”object”。

JavaScript 检测数据类型,typeof 是最常用的方法,但它有局限性——比如对 null、数组、对象、日期、正则等都返回 "object",容易误判。所以不能单靠 typeof,得配合其他方式一起用。
typeof 的基本用法和常见结果
typeof 是一个操作符(不是函数),后面跟变量或字面量,返回一个表示类型的字符串:
typeof 42 → "number" typeof "hello" → "string" typeof true → "boolean" typeof undefined → "undefined" typeof function() {} → "function" typeof null → "object"(这是历史 bug,但一直保留) typeof []、typeof {}、typeof new Date() → 全是 "object" typeof Symbol("a") → "symbol" typeof BigInt(123) → "bigint"
如何准确判断对象类类型(Array、Date、RegExp 等)
当 typeof 返回 "object" 时,需要用 Object.prototype.toString.call() 来精确识别:
Object.prototype.toString.call([]) → "[object Array]" Object.prototype.toString.call(new Date()) → "[object Date]" Object.prototype.toString.call(/abc/) → "[object RegExp]" Object.prototype.toString.call(null) → "[object Null]" Object.prototype.toString.call(undefined) → "[object Undefined]"
可以封装一个通用判断函数:
立即学习“Java免费学习笔记(深入)”;
function getType(val) {
return Object.prototype.toString.call(val).slice(8, -1).toLowerCase();
}
// getType([]) → “array”
// getType({}) → “object”
其他实用判断方式补充
判断是否为数组:Array.isArray(arr)(推荐,比 toString 更直接) 判断是否为纯对象(非 null,且是 Object 构造出来的):val !== null && typeof val === 'object' && val.constructor === Object,或更稳妥的 Object.getPrototypeOf(val) === Object.prototype 判断是否为函数:typeof fn === 'function' 即可,现代 JS 中也兼容箭头函数 判断是否为原始值(primitive):val === Object(val) 为 false 时就是原始值(注意:new String('a') 是对象,会返回 true)
基本上就这些。用 typeof 快速分大类,再用 toString.call 或专用方法(如 Array.isArray)细化,就能稳稳判断绝大多数类型了。
以上就是javascript如何检测数据类型_ typeof怎么用的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1544241.html
微信扫一扫
支付宝扫一扫