数组
数组是什么
数组(Array)是一种可以按顺序保存数据的数据类型
可以一次性存储多个数据
声明语法:
let 数组名=[数据1,数据1,...,数据n]
//数组名称:
//1.如果是名词:请在后面加 s\es
//2.其它常见名称有arr list items studentList postList
let 数组名=['小明','小刚','小红','小丽','小米']
取值语法:
数组名[下标]
let 数组名=['小明','小刚','小红','小丽','小米']
names[0]//小明
names[1]//小刚
特性
数组是按顺序保存,所以每个数据都有自己的编号
⚫ 计算机中的编号从0开始,所以小明的编号为0,小刚编号为1,以此类推
⚫ 在数组中,数据的编号也叫索引或下标
⚫ 数组可以存储任意类型的数据
操作
数组本质是数据集合 操作就是指 增加 删除 修改 查询(获取)
1.数组增加新的数据
数据.push() 方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度 (重点)
主要应用场景:在数据库之前,实现数据新增操作都是使用push
arr.push(元素1,...,元素n)
let arr= ['red','green']
let arrlength = arr.push('blue')
console.log(arrlength);
conloge.log(arr);
push(你想追加的元素)
特点:
1.元素可以是一个,也可以是多个
2.它是将元素到数组的最后
返回新增元素之和的数组长度-----一般没什么卵用
arr.push(元素1,...,元素n)
let arr = [4,5,6,7,8,9]
arr.push(1, 2, 3, 4)
console.log(arr);
数组arr.unshift(新增的内容)
方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度 (重点)
arr.unshift(元素1,...,元素n)
let arr = [4,5,6,7,8,9]
arr.unshift(1, 2, 3, 4)
console.log(arr);
删除数组
pop()方法(删除数组尾元素)
可以删除数组最后一个元素,并且返回当前被删除的元素
shift()方法(删除数组首元素)
可以删除数组第一个元素,并且返回当前元素
splice()方法(删除数组中间元素) 重点!!
起始索引:从0开始
删除数量:可以指定数量,如果没有指定,则删除从索引位置开始一直到最后的所有元素(如果指定的数量大于剩余的数量,不会报错)
arr。splice(1,1) //(起始索引,数量)
修改数组
数组的获取和修改需要勇敢索引
在赋值的时候,如果索引不存在,就是添加,如果索引存在就是修改
如果索引不存在,就是添加:就是在当天索引位置添加一个元素,同时这个操作会改变当前数组的长度
数组[下标]=新值
let arr=[]
for (let i=0;i<5;i++){
let value=+prompt('请输入数')
//将当前输入的值添加到数组?
//arr.push(value)
//将值添加到指定的索引位置
arr[i]=value
}
console.log(arr)
获取
·数组名称[索引下标]
·索引下标从0开始
·元素:数组中存储的数据就叫元素
·下标:顺序的索引值就叫下标
·长度:数组中存储的数据数量
遍历
由于数组是有长度的,可以明确循环次数,所以一般使用for遍历
索引从0开始,到length-1
函数
为什么需要函数?
➢ 可以实现代码复用,提高开发效率
函数是什么?
➢ function,是被设计为执行特定任务的代码块
函数可以把具有相同或相似逻辑的代码“包裹”起来,通过函数调用执行这些被“包裹”的代码逻辑,这么做的优势 是有利于精简代码方便复用。
函数的声明语法
function 函数名(){
函数体
}
function sayHi(){
document.write('hai~~')
}
函数使用
· 函数名命名规范
➢ 和变量命名基本一致
➢ 尽量小驼峰式命名法
➢ 前缀应该为动词
➢ 命名建议:常用动词约定
| 动词 | 含义 |
|---|---|
| can | 判断是否可执行某个动作 |
| has | 判断是否含义某个值 |
| is | 判断是否为某个值 |
| get | 获取某个值 |
| set | 设置某个值 |
| load | 加载某些数据 |
函数的调用语法
函数名()
//函数一次声明可以多次调用,每一次函数调用函数体里面的代码会重新执行一次
sayHi()
sayHi()
我们曾经使用的 alert() , parseInt() 这种名字后面跟小括号的本质都是函数的调用
函数体 (写在大括号里面的称之为函数体)
函数体是函数的构成部分,它负责将相同或相似代码“包裹”起来,直到函数调用时函数体内的代码才
会被执行。函数的功能代码都要写在函数体当中
function sayHi(){
document.write('hai~~') //函数体
}
sayHi()
总结
1.函数是用那个关键字声明的?
➢ function
- 函数不调用会执行吗?如何调用函数?
➢ 函数不调用自己不执行
➢ 调用方式: 函数名()
- 函数的复用代码和循环重复代码有什么不同?
➢ 循环代码写完即执行,不能很方便控制执行位置
➢ 随时调用,随时执行,可重复调用
函数传参
参数列表
➢ 传入数据列表
➢ 声明这个函数需要传入几个数据
➢ 多个数据用逗号隔开
定义参数的目的是为了提升代码灵活性 声明语法
function 函数名(参数列表){
函数体
}
//单个参数
function getSquare(num1){
document.write(num1*num1)
}
//多个参数
function getSquare(num1,num2){ //形参
document.write(num1*num2)
}
getSquare(1,100)//实参
形参:声明函数时写在函数名右边小括号里的叫形参(形式上的参数)
形式参数,说明为里需要一个值
形参可以理解为是在这个函数内声明的变量(比如 num1 = 10)
形参如果不被赋值,就是undefined
实参:调用函数时写在函数名右边小括号里的叫实参(实际上的参数)
实参也就是实际存在的值,它是一个真正的值
实参可以理解为是给这个变量赋值
➢ 开发中尽量保持形参和实参个数一致
➢ 我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参
特点:
1.调用前,它是一个参数的占位,说明调用方法需要传递过来
2.调用时,形参 是 方法的局部变量,只有在方法中可以使用,在方法外不能使用
函数的返回值
- 函数功能的单一性:函数只做业务处理,并不会对结果进行处理 ,它会将 结果返回,让调用者进行处理。
- 当调用某个函数,这个函数会返回一个结果出来
- 如果函数内部没有写return 来返回值,也会默认返回undefined
- 默认情况下,函数只能返回一个值(变量),如果想返回多个值,一般可以使用一个结构(对象)进行包装。
- 如果直接返回多个值,最终也会返回最后一个值。
- 函数可以没有 return,这种情况函数默认返回值为 undefined
- 函数内部只能出现 1 次 return,并且 return 后面代码不会再被执行,所以 return 后面的数据不要换行写
- 在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用
- 一个函数中可以写多个return,但是只会运行其中一个,函数执行的时候运行到return后面的代码不再执行
- 不同的业务处理需要时,有可能会出现多个return,并且return一般写在一个条件判断以内
return有两种功能
- 返回值
- 立即结束当前函数
作用域
概述:
通常来说,一段程序代码中所用到的名字不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突。
变量访问原则是什么?
➢ 作用域链:采取就近原则的方式来查找变量最终
一个变量定义但是不能使用:作用域的问题
全局作用域(全局有效)
作用于所有代码执行的环境(整个script标签内部)或者一个独立的js文件
局部作用域(局部有效)
作用于函数内的代码环境,就是局部作用域。因为跟函数有关系,所以也称为函数作用域。
块级作用域({}内有效)
块级作用域由{}包括,if语句和for语句里面的{}等
变量作用域
如果函数内部或者块级作用域内部,变量没有声明,直接赋值也当全局变量看,但是
强烈不推荐
全局作用域 (函数外部let的变量)
全局变量可以在任何区域都可以访问和修改
局部作用域(函数内部let的变量)
局部变量只能在当前函数内部访问和修改
块级作用域({}内部的let变量)
let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问
匿名函数
具名函数
声明:function fn(){}
调用:fn()
匿名函数
function (){}
立即执行函数
- 场景介绍: 避免全局变量之间的污染
- 多个立即执行函数要用 ; 隔开,要不然会报错
//方式一
(function(){ console.log(11)})();
//方式二
(function(){consople.log(11)}());
//不需要调用,直接执行
\