数组
当我们要存储很多相似信息时可以使用数组,数组就是[]
[] // 空数组 [1, 2, 3, 4, 5] ['刘浩然', '张三', '李四'] ['张三', '男', 18]
我们创建出来的数组,需要赋值给一个变量
let 变量名 = [] let 变量名 = [值, 值2, 值n]
下面创建数组的方式不推荐
let 变量名 = new Array() let 变量名 = new Array(数量) // 生成一个对应长度的空数组 数量书需要是一个number类型 let 变量名 = new Array(非number类型) // 直接生成一个数组,中间有对应的值 let 变量名 = new Array(值, 值2, 值3, 值n) // [值, 值2, 值3, 值n]
数组长度
在数组中,有几个值,长度就是几,获取长度可以通过length
来获取
数组.属性名 数组.length // 获取到数组长度的
下标
数组和字符串都有下标的概念,所谓下标就是我们对应的值的顺序,从0开始->length-1结束,下标我们一般称其为index
那么如何根据下标找到对应数组中对应的值呢???
数组[下标]
遍历数组
遍历数组的目的,是为了拿到数组中的每一个值
遍历数组是一个固定的写法:
正序遍历
for (let i = 0; i < 数组.length; i++) { // 数组[i] 就是每一个值 }
倒序遍历
for (let i = 数组.length - 1; i >= 0; i--) { // 数组[i] 就是每一个值 }
二维数组
数组中包含数组
[[值, 值2, [值, 值2]], [值, 值2, 值3]]
设置数组中的值
数组[下标] = 值
如果原位置有值,则覆盖对应的值
let arr = [1,2,3] arr[1] = "新的值" console.log(arr) // [1, "新的值", 3] arr[10] = "新的值" // 当我们强行添加一个不存在的下标时,会再本身的长度之后到对应的下标之间添加空的值
对象
对象拥有一个比数组更好的一个特性,每个值都有名字。以key: value
(姓名: 值)键值对
{ 属性名: 属性值, 属性名2: 属性值2, key: value, key2: value2, 方法名: function (参数) {} }
我们需要把对象赋值给一个变量才能使用,可以把属性名当成一个变量名,按照规范任意定义。
let 变量名 = { 属性名: 属性值, 属性名2: 属性值2 } let stu = { name: "张三", age: 18, sex: "男" }
获取到对象中对应的属性的属性值
如果我们想要获取到对应的属性值,可以通过对象.属性名
的方式获取
let stu = { name: "张三", age: 18, sex: "男" } stu.name // 张三
新的标准中,我们可以使用对象['属性名']
获取对应的值。这种写法前期基本用不到
stu['name'] // 张三
我们可以使用变量作为属性名。
let n = "name" stu[n] // 张三
对象最大的作用,是可以写复杂的数据了。对象中的属性值可以是任意类型的值。
let person1 = { name: "小明", sex: "男", sibbing: ["大明", "小红"] } let person2 = { name: "小花", sex: "女", sibbing: ['小华'] } // 既然写多个对象,不如把多个对象放在一个数组中 let people = [ { name: "小明", sex: "男", sibbing: ["大明", "小红"] }, { name: "小花", sex: "女", sibbing: ['小华'] } ]
遇到对象就对象.xxxx
遇到数组就数组[下标]
。遇到 aaa.xxx 那么aaa一定是个对象。遇到aaa[0] aaa大概率是个数组。
设置对象中的值
通过对象.属性名 = 值
可以给对象添加新的属性,或者覆盖之前的属性
let obj = { a: 1, b: 2 } obj.c = 3 console.log(obj) // {a: 1, b: 2, c: 3} obj.a = 4 console.log(obj) // {a: 4, b: 2, c: 3}
虽然上面显示的时a: 1,但是点开后还是a:4,这是浏览器开发者工具的问题,因为点开时会取获取最新的对象状态。
方法
对象中可以写函数,对象中的函数叫方法
let obj = { 方法名: function () { } }
写在对象中的函数和普通的函数最大的区别在于调用问题。
obj.方法名()
对象的作用仅仅是为了添加一个命名空间
function zhangsan () {} function zhangsan () {} // 冲突 const obj1 = { zhangsan: function () {} } const obj2 = { zhangsan: function () {} }
在对象中,函数有新的写法,这种写法更简单
let obj = { // 原写法 方法名: function (参数) { }, // 新写法 ES6 方法名 (参数) { } }
对象和数组值获取的问题
对象中,如果去获取不存在的属性,则会返回undefined
let obj = { name: "张三" } console.log(obj.name) // 张三 console.log(obj.age) // undefined
数组中,如果去获取大于长度的下标的值,会返回undefined
let arr = [1,2,3] console.log(arr[0]) // 1 console.log(arr[10]) // undefined
如果我们对象名写错了,也会报错,提示变量找不到。
如果我们的对象是null
Cannot read properties of undefined或者null (reading '某个属性名')
Cannot set properties of undefined或者null (setting '某个属性名')
遇到这种问题,先找到对应的行数,然后找到属性名
,然后查看属性名前面的对象是否没有正常的获取。