javascript数据类型有哪些_原始类型和引用类型有何不同?

发布时间 - 2026-01-10 00:00:00    点击率:
JavaScript数据类型分原始类型和引用类型:原始类型共7种(string、number、boolean、null、undefined、symbol、bigint),按值传递;引用类型如Object、Array等,变量存储内存地址,按引用传递。

JavaScript 数据类型分两类:原始类型(primitive)和引用类型(object)。区别不在“是不是对象”,而在值的存储方式和赋值/比较行为——原始类型按值传递,引用类型按内存地址传递。

原始类型有哪些?注意 nullundefined 的特殊性

共 7 种原始类型:stringnumberbooleannullundefinedsymbolbigint

  • typeof null 返回 "object",这是历史遗留 bug,但 null 本质是原始类型
  • undefined 是未赋值或未声明变量的默认值;null 是开发者显式赋的“空值”
  • Symbol() 每次调用都生成唯一值,常用于对象属性名防冲突
  • BigInt 用后缀 n 表示,如 123n,不能和 number 混算(123n + 1 报错)

引用类型有哪些?ArrayFunctionDate 都是 Object 的实例

所有非原始类型的值都是引用类型,底层都继承自 Object。常见包括:

  • ObjectArrayFunction
  • DateRegExpError
  • MapSetWeakMapWeakSet
  • PromiseProxyReflect

它们共性是:变量存储的是指向堆内存中实际数据的引用(指针),不是数据本身。

赋值和比较时行为差异最直观:看 === 和修改影响

原始类型比较值,引用类型比较地址——哪怕内容一模一样,两个 {} 也不相等。

let a = 42;
let b = a;
b = 99;
console.log(a); // 42 —— 原始类型赋值是拷贝值

let x = { name: "Alice" };
let y = x; // y 和 x 指向同一块内存
y.name = "Bob";
console.log(x.name); // "Bob" —— 修改 y 影响了 x

console.log({} === {}); // false
console.log([] === []); // false
console.log(/a/ === /a/); // false
  • 想深拷贝对象,不能只用 JSON.parse(JSON.stringify(obj)),它会丢掉 functionundefinedSymbol、循环引用
  • Object.is(a, b)=== 更严格,能区分 +0-0,且 Object.is(NaN, NaN) 返回 true

检测类型别只信 typeof:用 instanceofObject.prototype.toString.call()

typeof 对大部分引用类型都返回 "object",无法区分 ArrayDatenull 等。

console.log(typeof []);      // "object"
console.log(typeof null);    // "object"
console.log(typeof new Date()); // "object"

// 更可靠的方式:
console.log(Object.prototype.toString.call([]));     // "[object Array]"
console.log(Object.prototype.toString.call(null));   // "[object Null]"
console.log(Object.prototype.toString.call(undefined)); // "[object Undefined]"

// 或用 instanceof(注意跨 iframe 会失效)
[] instanceof Array; // true
  • Array.isArray() 是检测数组的推荐方式,比 instanceof 更健壮
  • typeof 只对函数准确返回 "function",其他引用类型都不可靠

原始 vs 引用的核心不是“能不能改变”,而是“变量里存的是什么”。一个 const obj = {} 不可重新赋值,但 obj.prop = 1 完全合法——因为 const 锁的是绑定,不是对象内容。这点最容易被忽略。


# javascript  # java  # js  # json  # proxy  # 区别 


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


相关推荐: 如何用腾讯建站主机快速创建免费网站?  魔毅自助建站系统:模板定制与SEO优化一键生成指南  再谈Python中的字符串与字符编码(推荐)  公司门户网站制作流程,华为官网怎么做?  高端企业智能建站程序:SEO优化与响应式模板定制开发  如何在阿里云服务器自主搭建网站?  如何用低价快速搭建高质量网站?  如何快速搭建高效可靠的建站解决方案?  香港服务器WordPress建站指南:SEO优化与高效部署策略  使用Dockerfile构建java web环境  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  实现点击下箭头变上箭头来回切换的两种方法【推荐】  浅析上传头像示例及其注意事项  大同网页,大同瑞慈医院官网?  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  Linux安全能力提升路径_长期防护思维说明【指导】  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  C语言设计一个闪闪的圣诞树  ,网页ppt怎么弄成自己的ppt?  python中快速进行多个字符替换的方法小结  常州企业网站制作公司,全国继续教育网怎么登录?  Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理  如何自定义建站之星模板颜色并下载新样式?  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  无锡营销型网站制作公司,无锡网选车牌流程?  大连 网站制作,大连天途有线官网?  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  网站制作报价单模板图片,小松挖机官方网站报价?  怎么用AI帮你设计一套个性化的手机App图标?  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  js代码实现下拉菜单【推荐】  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  详解Huffman编码算法之Java实现  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  Android滚轮选择时间控件使用详解  如何用AWS免费套餐快速搭建高效网站?  如何用y主机助手快速搭建网站?  PHP 500报错的快速解决方法  如何生成腾讯云建站专用兑换码?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  晋江文学城电脑版官网 晋江文学城网页版直接进入