JavaScript中有引用类型和值类型,这两种类型都被广泛的应用,那么这两个类型的区别在哪里呢?往下面看
值类型:当a的值赋值给b之后,如果两者的值再次改变,a和b的值互不影响
- 值类型的值通常都是存储在栈中
如代码所示:
let a = 100;
let b = a;
b = 200;
console.log(a) //100
//a是值类型, b引用了a 当b修改时不会影响a
如图所示a的值为100,然后a的值又赋值给了b,所以现在两者的值同时为100。紧接着b的值修改为了200,因为是a的值赋值给了b,所以b改变的仅仅是他自身的值,并不会影响到a
引用类型:当a的值赋值给b之后,两者之间任意一个值发生改变,都会影响到双方
- 引用类型的值通常是存储在堆中,栈中存储的只是一串代码,那串代码指向存储在堆中的值
如代码所示:
let a = {age:18};
let b = a;
b.age = 20;
console.log(a.age) //20
//a:引用类型, b和a引用的是同一个对象,其中一个改变,另一个也会改变
如图所示a是一个对象,对象的属性age的值是18,然后a的值赋值给了b。这时a和b指向了同一个对象,所以当b修改了age的值为20之后,再次打印a.age就输入了20,此时堆中age的值已经发生改变
常见的值类型: 数字Number 、字符串 String 、布尔值Boolean、未定义undefined 、符号Symbol
常见的引用类型: 对象Object 、数组Array、函数function、null(空地址)