Javascript中的数据类型

Posted 璀错

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 国际许可协议进行许可。

以上是关于Javascript中的数据类型的主要内容,如果未能解决你的问题,请参考以下文章

48个值得掌握的JavaScript代码片段(上)

JavaScript 代码片段

执行AJAX返回HTML片段中的JavaScript脚本

从 TypeScript 类型定义或 GraphQL 片段定义生成 JavaScript 空对象

你可能不知道的JavaScript代码片段和技巧(下)

你可能不知道的JavaScript代码片段和技巧(上)