Javascript中的数据类型
什么是值类型?
所谓值类型,其实指的是原始数据类型,它和后面讲的原始数据类型、基本数据类型是同一个东西。在语义理解上,基本和原始似乎能搭的上边,而值似乎不沾边,所有这里就分开来讲。
值类型存储在栈内存中,当你进行拷贝操作,会得到一片新的内存地址,当你进行相关运算,它会改变当前数据段所存的地址,当进行相关函数定义,就会去内存中开辟有关变量的地址,直到这个函数运行结束,内存就会被相应的回收。
大致有这些值类型:Number、String、Boolean、Symbol、Null、Undefined、BigInt
什么是引用类型?
引用类型分堆内存和栈内存存储。引用类型的访问地址存在栈内存中,其指向堆内存的结构。就因为是这个模型,当你进行引用类型对象拷贝的时候,其实拷贝的是其栈内存的地址,所以当你操作这个引用类型对象,首先它找到栈内存的地址,然后在堆内存中进行修改,这就很好地说明了浅拷贝引用类型对象,操作其中一个对象会影响另一个对象,因为它拷贝的是栈内存的地址,指向的是同一个堆内存地址。
大致有这些引用类型:Object、Function、Array、RegExp、Date
什么是原始数据类型(基本数据类型)?
在Javascript中,有7种原始数据类型,原始数据类型的值是不可改变的。
Number、String、Boolean、Symbol、Null、Undefined、BigInt
Javascript的基本类型包装对象有哪些?
除了null和undefined外,其他的都有。String、Number、Boolean、BigInt、Symbol
如何判断Javascript的数据类型(数据类型检测)
typeof
typeof
操作符返回一个字符串,表示未经计算的操作数的类型。typeof可以判断Number、String、Boolean、Symbol、BigInt、Undefined、Object、Function。这里值得一提的就是typeof null === object
, 什么鬼?一个基本数据类型等于一个引用类型。其实这个是JS语言设计上的问题,曾经也有ES修复提案被拒绝了,之所以产生这个结果是因为,JavaScript 中的值是由一个表示类型的标签和实际数据值表示的。对象的类型标签是 0。由于 null
代表的是空指针(大多数平台下值为 0x00),因此,null 的类型标签是 0,typeof null
也因此返回 "object"
instanceof
instanceof
运算符用于检测构造函数的 prototype
属性是否出现在某个实例对象的原型链上。像数组、函数、对象都可以用instanceOf来进行判断。
Javascript的数据类型是怎么确立的?
Javascript是一种弱类型的动态语言,也就是说,其定义的变量的类型的确立是在程序运行的时候,自动确立的。它是比较灵活的,你可以let a = 2020
,程序运行的时候走到这一步会确立它是number类型,之后你又可以a = '2020'
,走到这一步它又是字符串类型。
写在最后
具体的相关测试用例这里就不展开了,有兴趣的同学可以看下楼下的地址。
关于typeof的相关测试用例:https://zhengjiangtao.cn/coding/interview/use_typeof.js
关于instanceof的相关测试用例:https://zhengjiangtao.cn/coding/interview/use_instanceof.js
项目地址: https://github.com/ataola/coding
参考文献
Javascript数据类型和数据结构(MDN): https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Data_structures
原始数据(MDN): https://developer.mozilla.org/zh-CN/docs/Glossary/Primitive
typeof(MDN): https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/typeof
instanceof(MDN): https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/instanceof
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用