数组
什么是数组?
数组是一组数据有序的集合。数组它是属于复合数据类型。至少可以存储一个值。
为什么要使用数组?
因为在我们工作中 有很多数据是有关联的 我们要表示的时候想把这些数据用一个”东西”来存储,这个时候就可以用到数组!
数组的相关概念
数组元素
指数组中的每一个数据!我们就把它们称之为数组元素
数组下标(索引)
每一个数组元素都对应着一个数组下标 数组的下标是从0开始 第一个数组元素的下标是0,第二个数组元素的下标为1 第三个数组元素的下标为2 依此类推!
如何访问数组里面的某一个元素
格式:
数组变量名[下标]
数组的长度
数组的长度:数组中元素的总个数
其实数组的变量名是一个数组对象
如何去计算数组的长度:
数组变量名.length
在JS中 数组对象下面有一个length的属性 这个属性可以得到数组的长度
数组的长度与最大下标之间有什么关系 ?
最大下标=数组的长度-1
定义数组
使用[]来定义数组
第一种方式:先定义一个空数组 再往这个空数组中添加数组元素
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script type="text/javascript"> //使用[]来定义数组 //第一种方式:先定义一个空数组 再往这个空数组中添加数组元素 var arr = []; //是通过下标来添加的 arr[0] = "孙悟空"; arr[1] = "猪八戒"; arr[2] = "杨戬"; console.log(arr); </script> </body> </html>
第二种方式:在定义数组时候直接添加数组元素
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script type="text/javascript"> //使用[]来定义数组 //第一种方式:先定义一个空数组 再往这个空数组中添加数组元素 var arr = []; //是通过下标来添加的 arr[0] = "孙悟空"; arr[1] = "猪八戒"; arr[2] = "杨戬"; /*arr[99] = "红孩儿";*/ console.log(arr); //第二种方式:在定义数组时候直接添加数组元素 var arr1 = ["武庚","白菜","纣王","妲己"]; console.log(arr1); </script> </body> </html>
使用new关键字和Array()方法来定义数组
第一种方式:创建一个空数组
第二种:创建一个数组 要指定数组的长度
第三种:创建一个数组 并指定数组元素
注意:
在工作中一般都是使用[]来创建数组 基本上不会使用new关键字和Array方法来创建
多维数组
JavaScript它本身是没有多维数组的概念,因为在JavaScript中 数组元素的数据类型可以是任意数据类型。假设在一个数组中有一些数组元素的的类型还是数组 这个时候我们就将它称之为多维数组!
一维数组
简单来说,一个数组内所有的元素的数据类型的都不是数组类型,就是一维数组。
多维数组
超过一维都是可以叫多维,多维数组指的是一个数组中的元素又是一个数组。
如何访问二维数组的里面的数组元素呢?
格式:
数组变量名[一维数组的下标][二维数组的下标];
数组的遍历
什么是数组的遍历?
操作数组中的每一个数组元素
使用for循环来遍历数组
因为数组的下标是连续的,数组的下标是从0开始。
我们也可以得到数组的长度。
格式:
for(var i=0;i<数组的长度;i++){
数组变量名[i]
}
注意:条件表达式的写法
l i<数组的长度
l i<=数组的长度-1
求数组中的最大值与最大值的位置
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script type="text/javascript"> //求数组中的元素的最大值与最大值的位置 var arr = [1,2,3,4,5,666,88]; /* var arrLength = arr.length;//得到数组的长度 var sum = 0; for(var i=0;i<arrLength;i++){ sum += arr[i]; } document.write(sum/arrLength);*/ //先假设数组的第一个元素最大值 var arrMax = arr[0]; var arrMaxIndex = 0; //用于存储最大值的位置 var arrLength = arr.length; for(var i=1;i<arrLength;i++){ //拿假设的变量与数组中的其它元素进行比较 if(arrMax < arr[i]){ arrMax = arr[i]; arrMaxIndex = i; } } document.write(arrMax+"<br/>"+arrMaxIndex); </script> </body> </html>
使用for..in语句来遍历数组
for..in它本身是用来遍历对象的,因为数组也是属于对象的一种,那么也可以使用for..in语句来遍历数组
格式:
for(var 变量名 in数组变量名){
数组变量名[变量名]
}
注意:
一般情况下我们都会使用for循环来遍历数组,因为使用for循环遍历数组非常直观。
使用数组的方式来实现输出今天星期几
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script type="text/javascript"> var arr = ["星期天","星期一","星期二","星期三","星期四","星期五","星期六"]; console.log(arr); //使用数组的方式来实现输出今天星期几 //第一步:先创建时间日期对象 var myDate = new Date(); //第二步:通过时间日期对象中的一个方法来获取一周中某一天 getDay(); 取值:0~6 var week = myDate.getDay(); //可以使用星期一这个变量来作为arr数组的下标 console.log("今天是:"+arr[week]); </script> </body> </html>
遍历二维数组
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script type="text/javascript"> var arr = [ ["周更生","男",30,true,"大专",5000,500,"深圳黑马","山东省"], ["刘大庆","女",26,false,"研究生",8000,1500,"北京科技大学","山西省"], ["习远平","男",38,true,"大专",1000,250,"清华大学","陕西省"], ["李克弱","女",34,true,"高中",11000,30,"河北大学","江苏省"] ]; //遍历数组 肯定获取数组长度 //我们要求得到是一个表格 这个表格的行数是由一维数组的长度决定 //这个表格的每一行的列的数量是由二维数组的长度决定 var arrLength = arr.length; // //使用一个变量来保存表格 var str = "<table width='800' align='center' border='1' rules='all'>"; //对表格的行进行循环 for(var i=0;i<arrLength;i++){ str += "<tr>"; //表格的每一行的列的数量是由每一个二维数组的长度决定 for(var j=0;j<arr[i].length;j++){ str += "<td>"+arr[i][j]+"</td>"; } str += "</tr>"; } str += "</table>" document.write(str); </script> </body> </html>
函数
什么是函数?
函数是可以被命名的,它是为了解决某些功能的代码段!
可以被命名:表示函数是可以有名字的,也是可以没有名字的。
代码段:函数体
为什么要使用函数?
为了解决代码的重用!
减少代码量。
函数的分类
系统内置函数和程序猿自定义函数
定义函数
function 函数名([参数列表]){
函数体
return;
}
结构说明:
l function它是定义函数的关键字 不可以省略。
l 函数名它的命名规则与变量名是一样的
n 可以使用大小写英文字母、下划线(_)、美元符号($)、数字组成
n 不能使用数字开头
n 不能使用JS中的关键字和保留字作为函数名
n 如果函数是由多个单词组成的,那么可以使用下划线连接法和驼峰法
n 严格区分大小写
l 函数名后面紧跟着一对小括号 这一对小括号不能省略
l 小括号里面可能有参数,我们将其称之为形参
l 小括号后面紧跟着一对大括号 这一对大括号不能省略
l 大括号里面是函数体
注意:函数定义了一定要调用函数
调用函数
格式:
函数名([实参列表])
注意:在定义函数时如果有形参 反过来说 在调用的时候也要有实参 但是这个不是绝对的!
同名函数后面的会将前面的覆盖
函数一定是先定义后再调用
函数的参数
函数的参数分为两种:
形式参数和实际参数
形式参数:在定义函数的时候的参数就称之为形式参数,简称“形参”
在定义函数的时候 在函数名的后面的小括号里面给的变量名
实际参数:在调用函数的时候的参数就称之为实际参数,简称“实参”
使用函数来动态的输出M行N 列的表格
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script type="text/javascript"> //使用函数来动态的输出M行N 列的表格 function showTables(rows,cols,wid){ var str = "<table width='"+wid+"' border='1' align='center' rules='all'>"; //表格的行是由rows决定 for(var i=1;i<=rows;i++){ str += "<tr>"; //每一行的单元格是由cols决定 for(var j=1;j<=cols;j++){ str += "<td> </td>"; } str += "</tr>"; } str += "</table>"; document.write(str); } showTables(10,4,800); document.write("<hr/>"); showTables(15,6,1200); </script> </body> </html>
函数形参参数的默认值
上图所示:在定义函数的时候给形参赋值 称形参的默认值
关于函数形参中的默认值有一个问题需要大家注意:
n 如果形参中有多个参数,默认值一定要放置在形参列表的最后面
return关键字
一般在函数体里面不会有输出语句,只会有一个return关键字,将我们要输出的内容返回给函数的调用者。
l return在英文中表示“返回”的意思
l return关键字是在函数体里面使用。
它在函数体使用有两层含义:
1当函数体里面遇到了return关键字以后,当前的这个函数就不会再往下进行执行了。
2它会向函数的调用者返回数据 (重点) 返回值
格式:return 数据;
在调用函数时 可以定义一个变量要接收到这个函数的返回值
注意:
我们在以后的工作中,函数体里面尽量不要有输出语句(document.write alert console.log ),尽量的使用return关键字将数据返回给函数的调用者。
特别强调:
l 在一个函数里面,return关键字可以有多个,但是return只会执行一次
l return关键字它只能返回一个数据,如果需要返回多个数据,我们可以将多个数据使用数组的方式来保存,然后再将数组返回。
匿名函数
什么是匿名函数?
没有名字的函数 称之为匿名函数! 注意:匿名函数在JS中使用最多
匿名函数也是需要调用的!
将匿名函数赋值给变量或者是事件
a) 将匿名函数赋值给变量,然后通过变量名加上小括号来调用匿名函数
b) 将匿名函数赋值给事件 *****
将匿名函数赋值给事件 那么匿名函数什么时候才会执行?它要等到事件触发了以后 匿名函数才会执行。
c) 匿名函数的自调用 匿名函数自己调用自己 在一些JavaScript框架中 jQuery 都是匿名函数自调用
变量的作用域
什么是变量的作用域?
指变量在什么地方可以使用,什么地方不可以使用。
变量作用域的分类
变量作用域分为:全局作用域和局部作用域。
变量的作用域是通过函数来进行划分的。
在函数外面定义的变量我们将其称为全局变量,它的作用域是全局的。
全局作用域:变量在函数外面和函数里面都可以使用。
在函数里面定义的变量我们将其称为局部变量,它的作用域是局部的。
局部作用域:变量只能在该函数里面使用,在函数外面不可以使用。
问:是否能够提升局部变量的作用域呢?将局部变量的作用域提升至全局作用域。
在函数里面定义的变量也能够在函数外面访问到。
只需要将函数里面定义的变量的var关键字给去掉就可以实现将局部变量的作用域提升至全局作用域。
但是:并不建议直接就var 关键字给省略,我们建议在函数的外面定义一个同名的全局变量。
值传递与引用传递
传递--à赋值 变量与变量之间的赋值操作 就称为传递!
注意:
在JS中,基本数据类型之间的赋值操作都是值传递,复合数据类型之间的赋值操作都是引用传递。
值传递
将一个变量的值赋值给另外一个变量,如果修改其中一个变量的值,不会影响到另外一个变量的值!这两个变量之间是没有任何的联系。
引用传递
将一个变量的值(内存地址)赋值给另外一个变量,如果修改其中一个变量的值,会影响到另外一个变量的值,这两个变量之间是有联系的。
变量名变量值之间的关系!
变量名引用变量值 ,变量值被变量名所引用!
变量如何在内存中存储!
内存它是分区域:栈区和堆区
栈区:空间小,速度快 主要存储变量名以及值在堆区的地址
堆区:空间大,速度慢 主要存储变量的值
作业:
使用函数来打印M*M乘法表
showCfb(15)
******
定义一个函数,该函数能够判断一个数字是否是一个质数,是就返回true,否则就返回false。并利用该函数的功能,输出2-200之间的所有质数。
注:质数就是只能被1和它本身整除的数。