引用类型

187 阅读2分钟

这是我参与2022首次更文挑战的第2天,活动详情查看:2022首次更文挑战

引用类型

常见的引用类型有object、array、function;

Object

  • object相对来说是项目中经常用到的一种数据类型;object是由键值对组成的
let obj = {} // 一个空对象
let obj1 = {
    name: '大明' // {键:值}
}
  • 若是想要改变对象里面的值,我们可以采用下面的两种方法(取值也可以):
let obj = {name: '大明'};
obj.name = '小明';
obj[name] = '小明';

Array

  • 在基本数据类型中,每个变量只能存放一个值;在实际项目中,有太多的值了,不可能每个值都去声明一个变量来存放;所以array对象就比较方便了,我们可以把多个值放在一个array里面,需要时再取相对应的值。
let arr = ['西瓜', '香蕉', '苹果'];
  • array 它有下标、长度,我们可以通过下标去取值和赋值;
  • 生活中,我们数数都是从1开始数起,但是在数组的下标中,是从0开始数起的,数组中的第一个就是0,第二个是1,以此类推
let arr = ['西瓜', '香蕉', '苹果'];
arr[0] // '西瓜'
// 也可以改变它的值
arr[0] = 'watermelon'
console.log(arr) // ['watermelon', '香蕉', '苹果']

存放的地方

  • 引用类型存放于堆内存中,变量保存的是储存在栈内存中的一个指针,也就是引用堆内存中的对象的地址;通过这个地址可以找到存放在堆内存中相对应的对象;引用类型的变量赋值,实际上就是复制一个引用的地址而已;若是通过引用去改变某个对象时,这个对象发生改变,其他引用这个对象的都会跟着改变。
let obj = {
    name: '小明'
}
let a = obj;
let b = obj;
a['name'] = '大明'
console.log(obj);
console.log(a);
console.log(b);

以上的三个打印结果都是想同的,name都是大明;因为a、b、obj三个变量都是存放于栈中的指针,这个指针指向都是存放于堆内存中{name: '小明'},所以,在啊a改变属性name的值时,实际上就是改变了堆内存中的对象,三个变量的地址还是那个地址。