引言
程序员归根到底就是跟数据打交道,但是区别于其他的语言,JS脚本语言的数据类型还是有所不同的。
因为程序在运行的过程中会产生各种各样的临时数据,为了方便数据的运算以及操作,JS中有六种数据类型,分为两大类:简单数据类型与复杂数据类型。
简单数据类型与复杂数据类型
众所周知,数据的存放都在内存中,在内存中有堆和栈。
简单的数据类型存放于栈
复杂的数据类型存放于堆
简单的数据类型有:
- Number: 数据类型
- String: 字符串类型
- Boolean: 布尔类型
- Undefined:变量未初始化
- null:空类型
复杂的数据类型有:
- Object:对象类型
- Array:数据类型
如何判断数据类型
使用typeof
操作符
会将检查的结果以字符串的形式返回
例:
Number数据类型
在JS中:
- Number数据类型是最基本的数据类型
- 不区分整型数值和浮点型数值
- 所有的数值都是Number类型(整数和小数)
- 包含十六进制数据,以0x开头0-9之间的数字,a(A)-f(F)之间的字母构成。a-f对应的数字是10-15
- 八进制直接以数字0开始,有0-7之间的数字组成
Number对象方法
在JS中有很多内置对象,Number其实就是其中一个内置对象,该对象有许多的内置方法,因此可以调用一些内置方法来查看Number数据类型的最大值与最小值。
求最大值:Number.MAX_VALUE
求最小值:Number.MIN_VALUE
在JS中:
使用Infinity表示无穷大
使用-Infinity表示无穷小
NaN非法数字
在JS中对数值进行计算时,如果没有结果返回,则会返回NaN
例:
注意:
使用Number类型中进行浮点型的运算可能会得到一个不精确的结果(即:小数计算会丢失精度)
字符串类型(String)
- 字符串由单引号或双引号括起
- 例如单独一个字母也被称为字符串(例:‘a’)
- 记住不能一个单引号一个双引号混合使用
布尔类型(Boolean)
- 任何非零数值都是True,包括正负无穷大
- 只有0和NaN是false
- 任何非空字符串都是True
- 只有空字符串是false
- 任何对象都是true
- 只有null和undefined是false
Undefined类型
Undefined是一种比较特殊的类型,表示变量未赋值。只有一个值:undefined
例:
var name;
console.log(name);
name没有被赋值就被调用了,此时会输出undefined
undefined 与 Undefined的区别
undefined和’123‘,‘abc’一样,是一个常量
Undefined和Number.String一样,是一个数据类型
注意:使用typeof
对没有初始化和没有声明的变量都会返回undefined
Null类型
Null类型也是只有一个值:null
从语义上,null表示一个空的对象,因此使用typeof
查看类型会返回一个Object
例:
var book = null;
console.log(typeof book);
深入解剖Null类型
正如上面所说,数据是存放在内存中,内存有栈与堆
那么null指向的空对象就存放在堆中,然后在栈中使用地址就能访问到这个空对象。
undefined 与 null
undefined值是从null值衍生出来的,因此通过比较undefined和null是否相同来验证:
例:
var test1 = null;
var test2 = undefined;
//比较test1,test2值是否相同
console.log(test1 == test2);
//比较test1,test2值以及类型是否相同
console.log(test1 === test2);
从结果可以看到,值是相同的,但是类型并不相同。
简单数据类型与复杂数据类型的本质区别
简单数据类型存放于:栈:由编译器自动分配释放,存放函数的参数值,局部变量的值等。(体积小,使用频率高)
复杂数据类型存放于:堆:由程序员分配释放,若开发者不释放,则程序结束时由OS回收(体积大
以上仅作为本人学习JS的笔记记录,如果有地方表达不正确,欢迎各位大神指点迷津。