JavaScript 所⽀持的五种基本类型:
1.Number: 即数字类型,这⼀类型的数据包括:
正负整数与浮点数,例如:0、1、-1、-0.25、3.14等。
⼋进制数与⼗六进制数,例如:0377、0xff等。
指数,即⽤科学计数法表⽰的数字,例如:1e+2、10e+3等。
Infinity 与 NaN,这是 JavaScript 中的两个特殊数字。其中,Infinity 表⽰的是⼀个超出 JavaScript 能接受范围的数字,相当于 JavaScript 世界中的“⽆穷⼤”,和数学中有正⽆穷⼤和负⽆穷⼤⼀样,这类值也是有 Infinity 和 -Infinity 两种的。而 NaN 则表⽰的是⼀种不符合规范但仍属于数字类型的数字,例如当我们让 ⼀个数字与⼀个字符串相乘时,结果就会是⼀个 NaN。
2. String: 即字符串类型,这⼀类型的数据主要指的是被反引号、单引号或双引号所包括起来的、由任意数量字 符组成的字符序列,例如:'a'、'123'、"one"、"one two three"等。
3.Boolean: 即布尔类型,这⼀类型的数据只有 true 和 false 两种值,主要⽤于关系运算和逻辑运算。
4. undefined: 这是 JavaScript 中的⼀个特殊值,当我们访问⼀个不存在的变量,或未被初始化的变量时,程序 就会得到⼀个 undefined 值。
5.null: 这也是 JavaScript 中的⼀个特殊值,通常是指没有值、空值,不代表任何东西。null 与 undefined 最⼤ 的不同在于,被赋予 null 的变量会被认为是被初始化了的,只不过它是个空值。
在 JavaScript 中, 任何不属于上述五种基本类型的值都会被视为对象,某些宿主环境甚⾄将 null 值也视为⼀个对 象。
作为⼀种动态类型的脚本语⾔,JavaScript 的数据类型是直接与“值”,而不是与变量相 关联的。这也就意味着,在 JavaScript 代码的执⾏过程中,变量的类型是可以随着变量的值而变化的,例如,如果我们在代码中定义了⼀个名为 x 的变量, x 的值是可以初始值为数字,然后在执⾏过程中被重新赋予其他类型的值的, JavaScript的宿主环境会负责⾃动识别变量的类型。
在 JavaScript 中,变量只负责存储数据,与数据类型并没有直接的关联,这是它与 Java、C/C++ 这些强类型语⾔的⼀个 重⼤区别。那么,变量在存储上有没有分类型呢?答案是有的,变量的存储类型决定了变量值的存储⽅式.
根据 ECMAScript 标准的规定,变量按照其存储⽅式可分为以下两种类型:
原始类型: 在这⼀类型存储⽅式下,变量的值往往会直接存储在变量所在栈空间中,由于这种⽅式所占的内存 空间是固定的,所以通常⽤来存储⼀些简单且需要快速存取的数据。
引⽤类型: 在这⼀类型存储⽅式下,变量的值往往会被分配在堆空间中,然后将其在堆空间中的位置存储在变 量中,这通常⽤来存储⼀些复杂且内存开销较⼤的数据。
那么,当我们为⼀个变量赋值时,该如何判断该值的存储类型呢?答案很简单,在 JavaScript 中,只有基本类型是以 原始值的⽅式存储的。也就是说,除了 Number、String、Boolean、undefined 和 null 这五种基本数据类型之外, 所有的值都是以引⽤的形式存储的。 请记住,如果某个数据选择⽤引⽤的⽅式来存储,就说明这段数据所占⽤的内存空间⼤小是不固定的,因此需要让 JavaScript 解释器会在堆空间中为其分配内存。如果我们将其分配在栈空间中,其不固定的内存空间势必会降低数据 的查寻速度。所以,我们选择了将该数据在堆空间中的位置存储在了变量所在的栈空间中,而位置信息的⼤小是固定 的,所以把它存储在栈中对变量性能⽆任何负⾯影响。