数据类型
一.基本数据类型:Undefined、Null、Boolean、Number、String#
[1]基本类型值是指简单的数据段,5种基本类型是按值访问的,因为可以操作保存在变量中的实际值
[2]基本类型的值在内存中占据固定大小的空间,被保存在栈内存中。从一个变量向另一个变量复制基本类型的值,会创建这个值的一个副本。
[3]不能给基本类型的值添加属性
1.Undefined###
Undefined类型只有一个值,就是undefined.
出现场景:
[1]已声明未赋值的变量
[2]获取对象不存在的属性
[3]无返回值的函数的执行结果
[4]函数的参数没有传入
[5]void(expression)
2.Null###
Null类型只有一个值,就是null,逻辑角度看,null值表示一个空对象指针
实际上undefined值是派生自null值的,所以undefined == null
null不能添加自定义属性
出现场景:对象不存在时
3.Boolean###
Boolean类型只有两个值:true 和 false
出现场景:
[1]条件语句导致系统执行的隐士类型转换
[2]字面量或变量定义
4.Number###
数值表示:
[1]js中可以保存正0和负0,且被认为相等
[2]浮点数值:该数值中必须包含一个小数点,并且小数点后面必须至少有一位数字。
(1)由于浮点型数值需要的内存空间是保存整数值的两倍,因此js会不失时机地将浮点数值转换成整数值,若小数点后没有跟任何数字或者浮点值本身表示的就是一个整数,这个数值会作为整数值来保存。a=1.00 console.log(a) 1
(2)浮点数值的最高精度是17位小数
(3)对于极大或者极小的数,可以用科学计数法e来表示的浮点数值来表示
(4)默认情况下,js会将小数点后面带有6个0以上的浮点数值转换为以e表示法表示的数值
(5)基于IEEE754数值的浮点计算的通病是舍入误差的问题。如:0.1+0.2 === 0.3(15个0)4
[3]js中的数值范围是Number.MIN_VALUE(5e-324) —— Number.MAX_VALUE(1.7976931348623157e+308)
(1)如果超出正数范围,输出Infinity(正无穷大),超出负数范围,输出-Infinity(负无穷大)
(2)+-Infinity不能参与数值计算
(3)Number.MAX_VALUE+1 != Infinity,因为计算机最多保存52位尾数位,保存不了1000多位,早就失去精度,即小数位全为0,所以相加不变
(4)Number.MIN_VALUE - 1 != -Infinity,也是同样的原因,所以结果为-1
(5)可以用isFinite()来确定一个数值是不是有穷的,包含着隐式类型转换 布尔值Number()
(6)isFinite(NaN) //false
[4]NaN
(1)NaN与任何值都不相等,包括NaN本身
(2)任何涉及NaN的操作都会返回NaN
(3)isNaN()来判断这个数字是不是NaN,包含着隐式类型转换Number()
[4]数值转换:Number()可用于任何类型,parseInt()和parseFloat专门用于把字符串转换成数值
4.String###
[1]toString()
Null和Undefined没有该方法
Boolean、Object、String有该方法
Number使用该方法可以传递基数2、8、10、16,如var num = 10;num.toString(2);//1010
但10.toString(2)会报错,因为数字后面不能跟标识符
[2]String()
String(null);//'null'
String(undefined);//'undefined'
二.引用数据类型:Object#
[1]引用类型值是指那些可以由多个值构成的对象。js不允许直接访问内存中的位置,也就是不能直接访问操作对象的内存空间。在操作对象时,实际上是在操作对象的引用而不是实际的对象。
[2]引用类型的值是对象,保存在堆内存中,包含引用类型值的变量实际上包含的并不是对象本身,而是一个指向该对象的指针。从一个变量向另一个变量复制引用类型的值,复制的其实是指针,因此两个变量最终都指向同一个对象。
[3]对于引用类型的值,可以为其添加属性和方法,也可以改变和删除其属性和方法