JS数据类型-引用类型
···
1. 数组
1.1 数组基本语法
1.1.1 数组介绍
- 作用:一个数组变量可以存储多个数据
- 数组内存的组成
- 元素:数组内的数据
- 下标:数据在数组中的位置(下标不会跳跃)
- 长度:元素的数量
1.1.2 数组语法
<script>
let names = ['皮卡丘', '卡比兽', '哥德小姐', '冰鬼护', '黏美露龙']
console.log(names)
console.log(names[2]) //结果是对应数组下标 [2]的哥德小姐
console.log(names.length) //结果是5,数组长度
</script>
1.1.3 数组遍历
let names = ['皮卡丘', '卡比兽', '哥德小姐', '冰鬼护', '黏美露龙']
for (let i = 0; i < names.length; i++) {
console.log(names[i])
}
1.2 数组操作
1.2.1查询和修改
<script>
let arr = [11, 22, 33, 44, 55]
// 查询(数组取值)
console.log(arr[0]) //下标存在,则会获取元素
console.log(arr[6]) //下标不存在,则会获取undefined
// 修改(数组赋值)
arr[1] = 88 //下标存在,为修改[下标]对应的值
arr[5] = 99 //下标不存在,为新增一个元素
arr[7] = 789 //跳过一个位置,新增元素,则中间[6]会出现空值
console.log(arr)
</script>
1.2.2 新增元素
<script>
// 新增元素有3个方法
let arr = [11, 22, 33, 44, 55]
// 方法一:添加至末尾
arr.push(66, 77)
// 方法二:添加至开头
arr.unshift(-00, 00)
// 方法三:数组赋值
arr[9] = 88
console.log(arr)
</script>
1.2.3 删除元素
<script>
let arr = [11, 22, 33, 44, 55, 66, 77, 88]
// 删除最后一个元素
arr.pop()
// 删除第一个元素
arr.shift()
// 删除指定元素
//arr.splice(起始位置,删除数量) 删除从起始位置开始删除
// 若删除数量不写,则直接从起始位置到最后全部删除
arr.splice(3, 5)
// 前面有删除的元素,则会先执行前面的
// 下标对应的数值也会跟着改变
// 从而影响下面删除元素的位置
</script>
1.3 数组应用
1.3.1 数组求和
<script>
// 求一组数据总和
let arr = [11, 22, 33, 44, 55, 66, 77, 88]
let sum = 0 //声明变量存储结果
// 遍历数组
for (let i = 0; i < arr.length; i++) {
console.log(arr[i])
// 累加
sum += arr[i]
}
console.log(sum, sum / arr.length)
</script>
1.3.2 数组求最大值和最小值
<script>
let arr = [110, 212, 133, 44, 155, 66, 77, 55]
// 先设最大值为第一个
let max = arr[0]
// 设最小值为第一个
let min = arr[0]
// 遍历一边数组
for (let i = 0; i < arr.length; i++) {
console.log(arr[i])
// 比较大小
if (arr[i] > max) {
max = arr[i]
} else if (arr[i] < min) {
min = arr[i]
}
}
console.log(max, min)
</script>
1.3.3 筛选数组
<script>
let arr = [110, 212, 133, 44, 155, 66, 77, 55]
let newArr = [] //声明一个空数组,用来放筛选出来的元素
//先遍历一边 看看有没有符合的值
for (let i = 0; i < arr.length; i++) {
// console.log(arr[i])
// 筛选
if (arr[i] > 100) {
console.log(arr[i]) //显示那些值
newArr.push(arr[i]) //把值都往后塞
}
}
console.log(newArr)
</script>
···
2. 函数
2.1 函数
2.1.1 函数语法
2.1.2 函数传参
-
函数参数
-
形参:
-
实参
-
传参
调用者传递数据给函数,即给函数名里的变量赋值 -
收
函数接收传递过来的值
function 函数名(形式参数){ 函数体代码 }
-
-
函数传参的实质:实参给形参赋值的过程
(1)函数传参是按照传入顺序一一赋值
(2)函数每一次调用传参过程都是独立的,互不影响
(3)函数 形参数量 和 实参数量 可以不一致的(没有写就是undefined,写了就有值)
//需求:声明一个函数,可以求任意两个数字的和
function sum(num1, num2) {
console.log(num1)
console.log(num2)
console.log(num1 * num2)
}
sum(99, 100) //给num1 和 num2 赋值
2.1.3 函数默认参数(逻辑短路)
- 逻辑短路运算:
-
&&:一假则假
左边式子判定为假,则无条件返回左边式子的值
,否则返回 右边式子的值 -
|| :一真则真
左边式子判定为真,则无条件返回左边式子的
值
,否则返回右边式子的值
-
2.1.4函数返回值
-
函数返回值 : 函数 传递数据 给调用者
1. 函数通过return将值传出 function 函数名(变量名){ return 值 } 2. 调用者接收return 的值 let 新变量名 = 函数名(给变量名赋的值) document.write(新变量名) //打印
···
3. 对象
3.1 对象
3.1.1 对象语法
let 对象名 = {
属性名:'属性值'
属性名:function(){} //函数类型
}
console.log(对象名.属性名) //完成取值
函数没有返回值,调用函数的结果是undefined
所以要显示对象中的函数中的内容,代码为obj.food()
3.1.2 对象操作(查询对象属性)
-
查询对象属性的特点
(1)属性名存在:则能获取属性值
(2)属性名不存在:则获取undefined -
对象取值的两种方法
(1)点语法:对象名.属性名
(2)[]语法:对象名[‘属性名’]
3.1.3 对象操作(新增与修改)
-
修改属性
对象名.属性名=赋值
-
新增属性(和增是同样的语法)
(1)如果对象属性名存在,则是修改属性
(2)如果对象属性名不存在,则是新增属性 -
删除属性(了解)
delete 对象名.属性名
3.1.4 对象遍历
- 遍历对象:for-in循环 (专用于遍历对象)
for(let key in 对象名){ 对象名[key] }
let obj = {
name: '张XX',
age: 23,
gender: '男',
hobby: ['学习', '学习', '学习'],
food: function () {
console.log('potato')
},
somebody: {
name: 'XXX'
}
}
for (let key in obj) {
console.log(key) // 循环变量 显示的所有的属性名
console.log(obj[key]) // 显示所有的属性名和属性值
}
3.1.5 内置对象
内置对象:由js作者提前写好的对象,直接拿来用即可
Math:数学对象