JavaScript数据类型有哪些_如何准确判断一个变量的类型

发布时间 - 2025-12-31 00:00:00    点击率:
JavaScript有7种原始类型(string、number、boolean、null、undefined、symbol、bigint)和1种引用类型(object),共8种;typeof无法准确判断null和多数对象,推荐用Object.prototype.toString.call()精准识别。

JavaScript 有 7 种原始(primitive)数据类型和 1 种引用(object)类型,共 8 种。准确判断变量类型不能只靠 typeof,它对 null 和多数对象都返回 "object",容易误判。

7 种原始类型 + 1 种对象类型

原始类型(按字面量直接创建,不可变,存于栈内存):

  • string:如 "hello"
  • number:如 423.14NaNInfinity
  • boolean:如 truefalse
  • null:唯一值 null(注意:typeof null === "object" 是历史 bug)
  • undefined:未赋值或未声明变量的默认值
  • symbol(ES6):唯一且不可变的标识符,常用于对象属性键
  • bigint(ES2025):表示任意精度整数,如 123n

引用类型(对象,存于堆内存,变量存储的是引用):

  • object:包括普通对象、数组、函数、日期、正则、Map、Set、Promise 等所有非原始类型——它们的 typeof 多数返回 "object""function",需进一步区分

推荐的类型判断方法:Object.prototype.toString.call()

这是最可靠、可扩展的通用方式,能精准识别内置对象类型:

  • Object.prototype.toString.call(123)"[object Number]"
  • Object.prototype.toString.call([])"[object Array]"
  • Object.prototype.toString.call(null)"[object Null]"
  • Object.prototype.toString.call(undefined)"[object Undefined]"
  • Object.prototype.toString.call(new Date())"[object Date]"
  • Object.prototype.toString.call(/abc/)"[object RegExp]"

可封装为工具函数:

function getType(value) {
  return Object.prototype.toString.call(value).slice(8, -1);
}
// getType([]) → "Array"
// getType(Promise.resolve()) → "Promise"

按场景选择合适的方法

快速判断原始类型(排除 null/undefined):用 typeof

  • typeof "abc" === "string"
  • typeof 42 === "number"
  • typeof function(){} === "function"(函数是对象的特例,但 typeof 单独识别)

单独确认 null:用严格相等 value === null

判断数组:优先用 Array.isArray(value)(比 toString.call 更语义化、性能略优)

判断 Promise / Map / Set 等新对象:仍依赖 toString.call,因为 instanceof 在跨 iframe 场景下会失效

常见误区提醒

  • typeof null 返回 "object" —— 不是类型,是引擎早期 bug,已成标准,无法更改
  • typeof NaN 返回 "number" —— 因为 NaN 是一个特殊的数值
  • [] == falsetrue,但 [] 类型仍是 "object" —— 类型判断和值比较无关
  • new String("a") 是对象,typeof 返回 "object";而 "a" 是原始字符串 —— 字面量与构造函数创建的类型不同


# javascript  # es6  # java  # 工具  #  


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  非常酷的网站设计制作软件,酷培ai教育官方网站?  如何在阿里云服务器自主搭建网站?  网站图片在线制作软件,怎么在图片上做链接?  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  实例解析Array和String方法  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  如何注册花生壳免费域名并搭建个人网站?  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  如何用低价快速搭建高质量网站?  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  简单实现Android验证码  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  如何快速搭建高效服务器建站系统?  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  七夕网站制作视频,七夕大促活动怎么报名?  HTML 中如何正确使用模板变量为元素的 name 属性赋值  如何在企业微信快速生成手机电脑官网?  如何挑选高效建站主机与优质域名?  零基础网站服务器架设实战:轻量应用与域名解析配置指南  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册  Laravel如何使用.env文件管理环境变量?(最佳实践)  使用Dockerfile构建java web环境  如何用已有域名快速搭建网站?  Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  用v-html解决Vue.js渲染中html标签不被解析的问题  如何在万网自助建站平台快速创建网站?  php json中文编码为null的解决办法  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  Laravel怎么实现验证码(Captcha)功能  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  🚀拖拽式CMS建站能否实现高效与个性化并存?  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  Laravel如何实现本地化和多语言支持?(i18n教程)  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法  详解Android中Activity的四大启动模式实验简述  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  Python图片处理进阶教程_Pillow滤镜与图像增强  如何快速建站并高效导出源代码?  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  微信小程序 HTTPS报错整理常见问题及解决方案