JavaScript基本数据类型:简单的数据段
undefined、null、boolean、string、number、symbol、BigInt
JavaScript引用数据类型:有多个值构成的对象
object、array、date、regexp、function
js基本类型与引用类型区别
(1)基本类型的值是一经确定就不可变的
(2)基本类型的比较是值的比较
只有在它们的值相等的时候它们才相等。
当比较的两个值的类型不同的时候==运算符会进行类型转换,但是当两个值的类型相同的时候,即使是==也相当于是===
在用==比较两个不同类型的变量时会进行些类型转换。如上的比较先会把true转换为数字1再和数字1进行比较,结果就是true了
(3)基本类型的变量是存放在栈区的(栈区指内存里的栈内存)栈区包括了 变量的标识符和变量的值
(4)引用类型的值是可变的
可以为引用类型添加属性和方法,也可以删除其属性和方法
引用类型可以拥有属性和方法,并且是可以动态改变的
(5)引用类型的值是同时保存在栈内存和堆内存中的对象
js不同于其他语言,其不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间,实际上,是操作对象的引用,所以引用类型的值是按引用访问的。
准确地说,引用类型的存储需要内存的栈区和堆区(堆区是指内存里的堆内存)共同完成,栈区内存保存变量标识符和指向堆内存中该对象的指针,也可以说是该对象在堆内存的地址
(6)引用类型的比较是引用的比较
基本类型的比较--当两个比较值的类型相同的时候,相当于是用 === ,所以输出是true
引用类型是按引用访问的,换句话说就是比较两个对象的堆内存中的地址是否相同
undefined和null区别:
undefined 表示一个变量自然的、最原始的状态值,而null 则表示一个变量被人为的设置为空对象,而不是原始状态。所以,在实际使用过程中,为了保证变量所代表的语义,不要对一个变量显式的赋值 undefined,当需要释放一个对象时,直接赋值为 null 即可
0.1+0.2 != 0.3
在做算术运算时,JS 会先把十进制数转换成二进制数后再计算,十进制小数转二进制数的方式是 x 2 取整,0.1 和 0.2 的二进制数是个无限循环小数。
而 JS 中表示一个数字只有 64 位,其中精度位(有效数位)只有 52 位,所以当出现无限循环小数时,会通过 0 舍 1 入 的规则截取前 52 位(类似十进制的四舍五入),这样导致了精度位的丢失。0.1 实际参与计算的数变大了,0.2 参与计算的数变小了,所以运算结果不一定等于 0.3
js变量和函数声明的提升
- 在js中变量和函数的声明会提升到最顶部执行
- 函数的提升高于变量的提升
- 函数内部如果用 var 声明了相同名称的外部变量,函数将不再向上寻找。
- 匿名函数不会提升。