Day03作业 数据结构
概述 基本类型和引用类型
基本类型:String Boolean Number Null Undefined Symbol Bigint。
引用类型:Object(存储属性和属性值) Function。
数组(Array):有序的值的列表。
集合(Set):唯一值的集合。
特殊集合(WeakSet):特殊Set。
映射(Map):键值对。
特殊映射(WeakMap):特殊Map。
区别:
- (内存存储)基本类型存储在栈(Stack)里面;引用类型在栈上存储对堆上数据的引用(指针),在堆(Heap)上存储引用类型本身的数据。
- (清理方式)基本类型函数和方法执行完就清理内存;引用类型采用垃圾回收机制。
对象 存储属性和属性值
定义对象:
- Object构造器
// 方式一:尽量不使用这种方法
// 声明对象
let person = new Object();
// 构造器方式定义属性
person.name = 'liwanling';
person.age = 18;
// 引用
console.log(person.name)
- 对象字面量
// 方法二:创建对象字面量
let person1 = {
};
// 赋值,设置属性
person1.name = 'liwanling';
person1.age = 18;
console.log(person1.name);
// 创建对象字面量
let person2 = {
};
// 赋值
let person2 = {
name:'liwanling',
age:18,
// 可以加行为
getUserName:function(){
}
};
console.log(person2.name);
console.log(typeof person2); //Object
数组 有序的值的列表
(与其他编程语言相比)区别:
- 数组的每个槽位可以存储任意类型的数据。
- 动态大小 —— 影响性能。
定义数组:(声明)
- 数组构造器
const oArray = new Array();
- 数组字面量
const oArray = [];
console.log(typeof oArray); // Object
初始化:
// 数组初始化
const heroes = [];// 未赋值
console.log(heroes[0]);// Undefined
const heroes = [];
heroes[0] = '蝙蝠侠';
heroes[1] = '神奇女侠';
heroes[2] = '闪电侠';
heroes[5] = '水行侠';// 表示六个元素,其他元素为Undefined
console.log(heroes);
const avengers = ['美国队长','钢铁侠','雷神','绿巨人'];
console.log(avengers);
// 删除数组元素:元素个数没变
const avengers = ['美国队长','钢铁侠','雷神','绿巨人'];
delete avengers[0];
console.log(avengers);
// 数组里可以是任意元素类型
let person2 = {
name:'liwanling',
age:18,
};
const a = [0,undefined,'123112',null,person2];
console.log(a);
解构数组:将数组中的元素取出来赋值给变量。
const array1 = [1,2,3];
let a = array1[0];
let b = array1[1];
let c = array1[2];
const [a,b,c] = [1,2,3];
console.log(`a=${
a},b=${
b},c=${
c}`);
const [a,b] = [1,2,3];// 两个变量a,b
console.log(a);
数组的属性和方法:
- length属性:数组的长度。
const avengers = ['美国队长','钢铁侠','雷神','绿巨人'];
console.log(avengers.length);
// 通过设置length属性改变数组元素(不可逆转的改变,无副本)
avengers.length = 1;
console.log(avengers);// [ '美国队长' ]
avengers.length = 5;
console.log(avengers);// <1 empty item> Undefined
// 不改变数组元素:将length设为只读属性get。
- pop()方法:删掉数组中最后一个元素。
// 声明数组
const avengers = ['美国队长','钢铁侠','雷神','绿巨人'];
// 数组维数缩小
console.log(avengers.pop());
console.log(avengers);
// delete运算符:元素个数没变,删掉元素变为Undefined
const avengers = ['美国队长','钢铁侠','雷神','绿巨人'];
delete avengers[0];
console.log(avengers);
pop()方法和delete运算符的区别:pop数组元素个数减少,delete运算符元素个数没变。
- push()方法:将新值添加到数组的末尾。
const avengers = ['美国队长','钢铁侠','雷神','绿巨人'];
avengers.push('蝙蝠侠');
console.log(avengers);
- shift()方法:删除数组中的第一个元素。
const avengers = ['美国队长','钢铁侠','雷神','绿巨人'];
avengers.shift();
console.log(avengers);// [ '钢铁侠', '雷神', '绿巨人' ]
console.log(avengers.shift());// 输出删除元素 钢铁侠
- unshift()方法:将新值添加到数组的开头。
const avengers = ['美国队长','钢铁侠','雷神','绿巨人'];
avengers.unshift('小超人');
console.log(avengers);
console.log(avengers.unshift());
- concat()方法:数组合并。