javascript中的数据类型
javascript中的数据类型
前置知识
变量
- 大多数的实用程序,都需要跟踪值的变化。因为程序在执行时,会对值进行各种操作,
值会不断发生变化
。在程序中最简单的实现这一点,就是将值赋值给一个符号容器
,这个符号容器称之为变量
。对于javascript来说,javascript变量是松散类型的,而变量不过就是特定时间点一个特定值的名称而已
。由于没有规则定义变量必须包含什么数据类型,变量的值和数据类型在脚本生命周期内可以改变。这样的变量很有意思,很强大。当然也会有不少问题
比如下面代码
var variable = 1;
variable = '3';
variable = null;
variable = [];
variable = undefined;
variable = {};
console.log('variable', variable); // {}
栈(stack)和堆(heap)
-
stack会自动分配的内存空间,它由系统自动释放;而heap则是动态分配的内存,大小也不一定会自动释放
基本数据类型(原始值)和复杂数据类型(引用值)
-
原始值类型 「值类型/基本数据类型」
- number
- string
- boolean
- null
- undefined
- symbol
- bigint
-
对象类型 「引用数据类型」
- 普通标准对象 object
- 标准特殊对象 Array, RegExp, Date, Math, Error...
- 非标准特殊对象Number, String, Boolean...
- 可调用/执行对象「函数」 function
- 基本数据类型是:存放在栈中的简单数据段,数据大小确定,内存空间大小可以分配, 它们是直接按值存放的,所以可以直接按值(by value)访问基本数据类型是原始值,
- 图示
- 引用数据类型是:存放在堆内存中的对象,每个空间大小不一样,要根据情况进行特定的配置。在js中,不可以直接访问堆内存空间中的位置和操作堆内存空间。只能操作对象在栈内存中的引用地址。所以复杂数据类型,是
按引用(by reference)
访问的。引用类型是存放在堆内存中的对象,变量其实是保存的在栈内存中的一个指针(保存的是堆内存中的引用地址),这个指针指向堆内存。 - 图示
关于js中的数据类型,我想闲聊几句
数据
- 数据一直都是程序的一个重要的存在。我们平时设置变量去接收值
let a = 1
;去存储数据localStorage.setItem('k', 1)
。或者console.log()
都是去追踪数据的变化。在没有框架之前,我们一直都在致力于对数据的追踪,但是仅限于追踪数据。然而vue将视图和追踪数据的变化
,完美融合,实现了MVVM。既然要追踪数据变化,结合上页面,真是一个伟大的创举!
类型
js中的类型是松散的,是动态类型的语言。正如开头所说变量不过就是特定时间点一个特定值的名称而已
。由于没有规则定义变量必须包含什么数据类型,变量的值和数据类型在脚本生命周期内可以改变。这也是很多人诟病js的一个点,所以出来了TS,来约束数据类型。然后在java
这种静态类型语言
中,对类型就显得非常呆板,说了是字符串,就不能改变其类型。所以出现了多态的转型,就是做数据类型的转化
。而我们js与生俱来就实现了多态,还有什么理由嫌弃他的类型松散呢? 我们应该利用现有的js特性,去更好的编写代码,而不是去嫌弃他,或者抛弃他。
转载自:https://juejin.cn/post/7135037801011085320