数组
1 基本概念
数组是指**一组数据的集合**,其中的每个数据被称作**元素**,在数组中可以**存放任意类型的元素**。<br /> 换言之, 数组是存放数据的容器
1) 定义数组
语法
//1. 使用[]创建空数组
var 数组名 = [];
//2. 在创建数组时, 给初始值
var 数组名 = ['小白','小黑','小胖'];
数组中可以存放任意类型的数据,例如字符串,数字,布尔值等
示例
var arr = ['小小胖',12,true,28.9]
2) 访问数组元素
通过下标(索引)访问数组元素, 下标从0开始
console.log(arr[0])
3) 添加数组元素
示例
var arr = ['小小胖', 12, true, 28.9]
arr[4] = 'newValue'
arr[6] = '第7个值'
console.log(arr) // 数组的长度为7
console.log(arr[5]) // undefined
4) 删除数组元素
示例
delete arr[1] // 删除数组元素, 不改变数组长度
console.log(arr)
<script>
var arr = [1,2,3]
//获取数组长度
console.log(arr.length);
console.log(arr);
//增
arr[3] = 4;
console.log(arr);
arr[6] = 9
console.log(arr);//中间没有赋值的就是undefined
console.log(arr[5]);//undefined
//删
delete arr[0]
console.log(arr);//之后的第0个元素就是undefined
console.log(arr[0]);//undefined
//改
arr[0] = 8
console.log(arr);//第0个元素变成了8
//查
console.log(arr[4]);
</script>
2 遍历
遍历: 依次访问数组的每一个元素
var arr = ['red','green', 'blue'];
for(var i = 0; i < arr.length; i++){
console.log(arr[i]);
}
<script>
var arr = ['李白','杜甫','王勃']
//常规方式
console.log(arr[0]);
console.log(arr[1]);
console.log(arr[2]);
//使用for循环
//长度 length 索引 0-length-1
for(var i=0;i<arr.length;i++){
console.log(arr[i]);
}
</script>
示例
求数组中的最大值
var arr = [1, 2, 11, 3, 4]
var max = arr[0]
for (var i = 0; i < arr.length; i++) {
if (arr[i] >= max) {
max = arr[i]
}
}
console.log(max)
示例
求数组中的和与平均值
<script>
var arr = [1,3,5,2,8,6]
//遍历
var sum = 0
for(var i = 0;i < arr.length;i++){
sum += arr[i]
}
console.log(sum);
console.log(sum/arr.length);
</script>
3 多维数组
如果一个数组a的一个元素也是一个数组, 数组a就叫多维数组.
即数组的数组,本质还是一个数组,只不过里面的元素是数组
示例
var arr = [1, 2, ['xiaopang', '小小胖']]
// 如何获得小小胖的值
console.log(arr[2][1])
<script>
/* 3个小组,每个小组有3名成员.每个成员都有业绩
第一组 [97,98,100]
第二组[99,88,90]
第三组[97,78,120]
想保存所有成员的业绩
*/
//arr就是一个二维数组(数组的数组),它里面每一个元素都是一个数组
var arr = [[97,98,100],[99,88,90],[97,78,120]]
console.log(arr);
//想拿到第二组的成绩
console.log(arr[1]);
//想拿到第二组,第二个成员的成绩
console.log(arr[1][1]);
//遍历
for(var i=0;i<arr.length;i++){
//console.log(arr[i]);
for(var j=0;j<arr[i].length;j++){
console.log(arr[i][j]);
}
}
</script>
函数
1 基本概念
可能会有非常多的相同代码或者功能相似的代码,这些代码可能需要大量重复使用
我们把实现特定功能的代码块叫做一个函数
// 声明函数
function 函数名() {
//函数体代码
}
2) 调用函数
语法
函数名();
示例
<script>
//先定义
function getSum(){
var sum = 0
for(var i = 1;i <= 10;i++){
sum += i
}
console.log(sum);
}
//调用
getSum()
</script>
2 参数
参数可以使函数实现更加强大的功能
参数相当于一个媒介,调用者可以把要操作的数据通过参数传递到函数内部
1) 实参与形参
语法
// 带参数的函数声明
function 函数名(形参1, 形参2 , 形参3...) { // 可以定义任意多的参数,用逗号分隔
// 函数体
}
// 带参数的函数调用
函数名(实参1, 实参2, 实参3...);
- 形参: 函数声明时参数
实参: 函数调用时参数
<script>
//先定义
function getSum(n,m){//形式参数
var sum = 0
for(var i = n;i <= m;i++){
sum += i
}
console.log(sum);
}
//调用
getSum(1,100)//实际参数
</script>
2) 传参的过程
传参的过程就是赋值的过程, 将实参的值赋值给形参
示例
进一步改造, 计算从n到m的和
// 声明函数
function getSum(n, m){
var sumNum = 0;// 准备一个变量,保存数字和
for (var i = n; i <= m; i++) {
sumNum += i;// 把每个数值 都累加 到变量中
}
alert(sumNum);
}
// 调用函数
getSum(5, 10);
3 返回值
一般一个函数在调用后, 会产生一个固定的结果, 一般将结果返回出来, 具体要怎么使用这个结果, 不是由函数决定的. 这就是编程里的”单一职责”原则
返回值相当于函数将操作完的数据返回给调用者,这样调用者就可以拿到数据
进一步改造
// 声明函数
function getSum(n, m){
var sumNum = 0;// 准备一个变量,保存数字和
for (var i = n; i <= m; i++) {
sumNum += i;// 把每个数值 都累加 到变量中
}
return sumNum
}
// 调用函数
var res = getSum(5, 10)
alert(res)
console.log(res)
<script>
//先定义
function getSum(n,m){
var sum = 0
for(var i = n;i <= m;i++){
sum += i
}
//console.log(sum);
return sum //返回结果给调用者
}
//调用
var total = getSum(1,100)//调用者就可以用一个变量来接收
console.log(total,total/2)
</script>
练习:
<script>
//写一个函数,判断一个年份是否是闰年
//能被4整除,但是不能被100整除
//能被400整除
function isRunYear(year){
return (year%4==0&&year%100!=0)|| (year%400==0)
}
var b = isRunYear(2022)
//判断
if(b){
console.log("是闰年");
}else{
console.log("是平年");
}
</script>
<script>
//定义函数
function getMax(arr){
var max = arr[0]
for(var i=1;i<arr.length;i++){
if(arr[i] > max){
max = arr[i]
}
}
return max //不要忘记return了
}
var arr = [3,2,6,9,8,7]
console.log(arr);//数组名就代表这个数组
var max = getMax(arr)//可以直接把数组名传进去
console.log(max);
</script>
内置参数,伪数组:
<script>
//定义函数
function getMax(){
//在函数内部,存在一个内置的变量arguments,是个伪数组
//console.log(arguments);
var max = arguments[0]
for(var i =1;i <arguments.length;i++){
if(arguments[i] > max){
max = arguments[i]
}
}
return max
}
var max = getMax(3,2,6,9,8,7)
console.log(max);
</script>
4 函数分类
1)普通函数
普通函数:有名字的函数
2)匿名函数
匿名函数:没有名字的函数
<script>
//普通函数:有名字的函数
function add(num1,num2){
return num1 + num2
}
//调用:有参数就给,有返回值就接
var sum = add(1,2)
console.log(sum);
//匿名函数:没有名字的函数
var fun = function (num1,num2){
return num1 + num2
}
console.log(fun);//其实现在函数名就相当是fun
//调用:使用fun来调用,有参数就给,有返回值就接
var total = fun(2,3)
console.log(total);
</script>
5 函数的注意事项
1,如果没有显示的调用return.则方法没有返回值,如果强行接收,那么接收的就是undefined
2,函数名其实是代表整个函数(类似于数组名代表整个数组)
3.如果实参的个数小于形参的个数,多余的形参运算的时候就是undefined
<script>
//1,如果没有显示的调用return.则方法没有返回值,如果强行接收,那么接收的就是undefined
/* function aaa(){
alert('aaa')
}
var bbb = aaa();
alert(bbb)//undefined */
//2,函数名其实是代表整个函数(类似于数组名代表整个数组)
/* function aaa(){
alert('aaa')
}
alert(aaa) */
//3.如果实参的个数小于形参的个数,多余的形参运算的时候就是undefined
function add(num1,num2,num3){
return num1+num2+num3
}
var sum = add(1,2)
console.log(sum);//NAN
/* var max = Math.max(1,3,9,4)
console.log(max); */
</script>
面向对象
概念
是一个思维方式<br /> 面向过程:完成一件事需要多少个步骤(重点关注在步骤)<br /> 面向对象:完成一件事需要多少个对象(重点是在找对象)
类
类是对现实生活中具有相同属性和行为的事物的一个统称 (抽象的,相当于是模板)
对象
现实生活中一个具体的存在 (具体的,通过模板创建出来的)
类和对象关系
类相当于是模板,对象是通过这个模板创建出来的一个个真实存在的个体<br /> 类中有什么,对象中就有什么<br />类和对象的关系, 可以认为是整体和个体, 抽象和具体的关系<br />通过上面的描述, 总结起来说, 就是
function 构造函数名 () {
// 函数体
}
- 使用
function
关键字表示定义一个构造函数 - 构造函数名一般首字母大写
示例: 2-1构造函数的定义.html
function Person() {
}
通过以上方式就可以定义一个Person构造函数, 相当于定义好了一个Person类
类的三要素
类名
属性:类所具有的特征
行为:类所有具有的功能
类的定义
function 类名(参数1,参数2){
}
<script>
//定义类(通过构造函数来定义)
function Person(){//首字母大写(构造函数的特点)
}
//通过类创建对象(实例化对象)
var p = new Person()
console.log(p);
console.log(typeof p);
</script>
对象的创建方式
方式一: 构造函数创建
//对象的创建方式
//方式一:构造函数创建
//定义类(通过构造函数来定义)
function Person() {//首字母大写(构造函数的特点)
}
//通过类创建对象(实例化对象)
var p = new Person()
console.log(p);
console.log(typeof p);
方式二: 字面量方式
//方式二:字面量方式
//创建一个空的对象
var stu1 = {}
console.log(stu1);
//创建一个有属性和方法的对象
var stu2 = {
name:'张三',
age:23,
study:function(){//匿名函数
console.log('学习');
}
}
console.log(stu2);
//访问属性方式一
console.log(stu2.name);
//访问属性二
console.log(stu2['name']);//引号不要漏掉
//调用方法
stu2.study()
构造函数的作用
通过构造函数实例化对象
在JS中, 我们通过构造函数(类)来实例化对象
语法
new 构造函数名()
示例: 2-2通过构造函数实例化对象.html
// 一. 定义一个构造函数
function Person() {
}
// 二. 实例化一个对象, 赋值给变量p
var p = new Person();
console.log(typeof p); // object
以上代码
- 通过new关键字, 产生了一个对象, 并赋值给变量p
- 通过
typeof p
测试变量p的类型为object, 说明p是一个对象在构造函数中定义属性
function 类名(参数1,参数2){
属性的定义
this.属性名1=参数1
this.属性名2=参数2
}
}示例: 2-3在构造函数中定义属性.html
// 一. 定义一个学生类
function Student(n, a) {
this.uname = n;
this.age = a;
}
// 二. 实例化对象
var stu = new Student('xiaoming', 20);
<script>
//定义类(通过构造函数来定义)
function Person(name,age){//首字母大写(构造函数的特点)
//定义属性
this.name = name
this.age = age
}
//通过类创建对象(实例化对象)
var p1 = new Person('张三',23)
var p2 = new Person('李四',24)
console.log(p1);
console.log(p2);
/* 手机类
型号 颜色 尺寸 价格
*/
</script>
方法的定义
在构造函数中定义方法
function 类名(参数1,参数2){
属性的定义
this.属性名1=参数1
this.属性名2=参数2
this.方法名 = function(){
方法体代码
}
}
方法的使用(调用)
语法
对象.方法名()
- 由于方法就是一个函数, 在后面加小括号表示方法的调用
示例: 3-2调用对象的方法.html
// 三. 调用方法 -- 对象.方法名()
stu.sayHi(); // 大家好
调用方法和属性
对象名.属性名
对象名.方法名
<script>
//定义类(通过构造函数来定义)
function Person(name,age){//首字母大写(构造函数的特点)
//定义属性
this.name = name
this.age = age
//定义方法
this.eat=function(){
console.log('吃饭');
}
}
//通过类创建对象(实例化对象)
var p1 = new Person('张三',23)
var p2 = new Person('李四',24)
console.log(p1);
console.log(p2);
//调用属性和方法(必须要有对象名来调用)
console.log(p1.name);
p1.eat()
console.log(p2.name);
p2.eat()
</script>
Math对象
简单使用:
<script>
//圆周率
console.log(Math.PI);
//最大值
console.log(Math.max(1,3,9));
//最小值
console.log(Math.min(1,3,9));
</script>
绝对值和取整:
<script>
//绝对值
console.log(Math.abs(-1));
console.log(Math.abs(1));
//取整
console.log(Math.ceil(1.2));//向上取整
console.log(Math.ceil(1.9));
console.log(Math.floor(1.2));//向下取整
console.log(Math.floor(1.9));
console.log(Math.round(1.2));//四舍五入
console.log(Math.round(1.9));
console.log(Math.round(1.5));
</script>
生成随机数:
<script>
//生成0-1之间的随机数 [0,1)
console.log(Math.random());
//生成1-10之间的随机数,包含1和10
//[1,10] --> [0,10) + 1 --> [0,1)*10 + 1
//[50,100] --> [0,51)+50 --> [0,1)*51 + 50
//规律 生成[min,max]的随机数(包含min和max)
//Math.floor(Math.random()*(max-min+1) + min)
/* 1-199 */
console.log(Math.floor(Math.random()*199+1));
</script>