第二课笔记
1.判断语句
-
if(条件表达式)
**if语句是最常用,最基本的**条件**判断语句,通过条件判断式的**值**来确定**是否**执行一段语句,或者*选择*执行哪部分的语句。
if(表达式){
语句
} -
if…else语句
**if…else语句是if 语句的标准形式,在if语句的基础上,增加了一个*else从句*,当表达式的值式*False*的时候执行else语句。
if(表达式){
语句1
}else{
语句2
} -
if…else if…else
if(表达式1){
语句1
}else if(表达式2){
语句2
}else if(表达式3){
语句3
}else{
语句n+1
} -
if 的镶嵌
-
if(表达式1){
if(表达式2){
语句1
}else{
语句2
}
}else{
if(表达式3){
语句3
}else{
语句4
}
} -
while表达式
while循环语句也称为前测试循环语句,它是利用一个条件来控制是否要继续重复的执行这个语句。
while(表达式){
语句
} -
do…while语句
do…while 语句也被称为后测试循环语句,它是利用一个条件来控制是否要重复执行这个语句,与while不同的是,它先执行一次循环语句,然后在去判断时候要继续执行。
do{
语句
}while(表达式)
-
for 循环语句
for循环语句也称为计次循环语句,一般用于循环次数已知的情况。
for(初始化表达式;条件表达式;迭代表达式){
语句
} -
swicth语句
swicth 语句式典型的多路分支语句,其作用与if. else.if语句相同,但swicth比if 语句更具有可读性,它可以更具一个表达式的值,来选择不同分支的执行。而且switch语句允许在找不到一个匹配条件下允许执行默认的一条语句。switch (表达式){
case 常量表达式:
语句
break
case 常量表达式:
语句
break
}
跳出语句
-
continue语句
用于跳过本次循环,并开始下一次循环
for(var i=1;i<10;i++){
if(i==6)continue
document.write(‘值为’+i)
} -
break语句
在循环语句中,break语句用于跳出循环。for(var i=1;i<10;i++){
if(i==6)break
document.write(‘值为’+i)
} -
异常处理语句
try:尝试执行的关键字
catch:捕捉异常的关键字
finally:最终一定会被处理的代码,该关键字和大括号都可以不写。 -
Error对象
try…catch…finally 语句中的catch通常捕捉到的对象为Error对象,当运行Java Script时候,如果产生了错误和异常,会生成一个Error对象实例来描述错误,该实例中包含了一些特定的错误信息。
Error对象有以下两个属性
name:表示异常类型的字符串
message:实际的异常信息
- throw语句主动抛出异常
throw new Error(内容)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
var a=10
var b=20
if(b>a){
document.write('b大于a')
}if(b<a){
document.write('b小于a')
}
var a=5;
if(a>5){
alert(a);
}else{
alert(1);
var i=1;
while(i<=10){
console.log(i++);
}
do{
console.log(i++);
}while(i<=10);
for (var i=1;i<=10;i++){
console.log(i);
}
var i='窗前明月光'
}finally {
alert('实际错误信息为;'+exception.message)
}
var i='窗前明月光'
try{
document.write(str.charat(5))
}catch (exception){
alert('程序错误')
}finally {
alert('其实我也可以不用 写')
try{
document.write(str.charat(5))
}catch(exception){
</script>
</head>
<body>
</body>
</html>
2.函数function
-
function的几种用法
1.最基本的作为一个本本分分的函数声明使用。
2.作为一个类构造器使用:
3.作为闭包使用
4.可以作为选择器使用
5.以上四中情况的混合应用:
6.利用Function处理ajax返回的js脚本: -
函数function
函数也是一个对象
函数中可以封装一些功能,在需要的时候可以执行这些功能
使用typeof 返回function调用函数时,解析器不会检查实参类型
所有要注意,是否有可能会接收非法参数,如果有可能则需要对参数类型惊醒检查
函数的实参可以是任意类型
调用函数时。解析器也不会检查实参的数量
多余实参不会被赋值
少于实参的数量少于形参的数量,则没有对应的实参将是undefined,
调用
fun();
return后得知将会作为函数执行的结果返回
可以用一个变量接受该值
return是函数中最后一句话
如果return后不跟值,返回一个undefined
如果函数中不写return,则返回undefined
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
function fun(){
alert("我是function");
}
function sum(a,b){
return a+b;
}
var value=sum(1,2);
console.log(value) */;
function sum(a,b){
return a+b;
}
sum(1,2);
</script>
</head>
<body>
</body>
</html>
3.立即执行函数
声明一个函数,并马上调用这个匿名函数就叫做立即执行函数;即立即执行函数是定义函数以后立即执行该函数。立即执行函数往往只会执行一次,立即执行函数会形成一个单独的作用域,我们可以封装一些临时变量或者局部变量,避免污染全局变量
- 立即执行函数有哪些作用
1、改变变量的作用域(创建一个独立的作用域)
2、封装临时变量 - 其他的写法
(function foo(){console.log("Hello World!")}())//用括号把整个表达式包起来,正常执行
(function foo(){console.log("Hello World!")})()//用括号把函数包起来,正常执行
!function foo(){console.log("Hello World!")}()//使用!,求反,这里只想通过语法检查。
+function foo(){console.log("Hello World!")}()//使用+,正常执行
-function foo(){console.log("Hello World!")}()//使用-,正常执行
~function foo(){console.log("Hello World!")}()//使用~,正常执行
void function foo(){console.log("Hello World!")}()//使用void,正常执行
new function foo(){console.log("Hello World!")}()//使用new,正常执行
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
(function(){
alert("立即执行");
})();
(function(a,b){
alert(a+b);
})(1,2);
</script>
</head>
<body>
</body>
</html>
4.数组(Array)
-
数组(Array)
数组也是一个对象
和普通对象功能类似,也是用来存储值的
不同的是普通对象时使用字符串作为属性名
二数组使用数字来作为索引操作元素 -
索引
从0开始的整数
数组的存储性能比普通对象要好,在开发中我们经常使用宿主来存储一些数据 -
JavaScript中创建数组有两种方式
(一)使用 Array 构造函数:
var arr1 = new Array(); //创建一个空数组
var arr2 = new Array(20); // 创建一个包含20项的数组
var arr3 = new Array(“lily”,“lucy”,“Tom”); // 创建一个包含3个字符串的数组
(二)使用数组字面量表示法:
var arr4 = []; //创建一个空数组
var arr5 = [20]; // 创建一个包含1项的数组
var arr6 = [“lily”,“lucy”,“Tom”]; // 创建一个包含3个字符串的数组 -
基本功能
-
1.push()
该方法可以向数组的末尾添加一个或多个元素,并返回数组的新长度 -
2.pop()
该方法可以删除数组的最后一个元素,并将被删除的元素作为返回值返回 -
3.shift()
可以删除数组中的第一个元素,并将被删除的元素作为返回值返回,如果数组为空则返回undefined 。
-
4.unshift()
向数组开头添加一份或多个元素,并返回新的数组长度
向前边插入元素一会,其他元素索引会一次向后调整 -
5.slice()
返回从原数组中指定开始下标到结束下标之间的项组成的新数组。
可以用来从数组提取指定元素
该方法不会改变原数组,而是将截取到的远胜于封装为一个先数组返回
参数
截取开始的位置索引,包含开始索引
截取结束位置的索引,不包含结束索引
第二个参数可以省略不写,此时会截取从开始索引到最后
索引可以传递负值,如果传递赋值则从后往前计算
-1倒数第一个 -2倒数第二个 -
6.splice()
很强大的数组方法,它有很多种用法,可以实现删除、插入和替换。
删除:可以删除任意数量的项,只需指定 2 个参数:要删除的第一项的位置和要删除的项 数。例如, splice(0,2)会删除数组中的前两项。
插入:可以向指定位置插入任意数量的项,只需提供 3 个参数:起始位置、 0(要删除的 项数)和要插入的项。例如,splice(2,0,4,6)会从当前数组的位置 2 开始插入4和6。
替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需指定 3 个参数: 起始位置、要删除的项数和要插入的任意数量的项。插入的项数不必与删除的项数相等。例 如,splice (2,1,4,6)会删除当前数组位置 2 的项,然后再从位置 2 开始插入4和6。
splice()方法始终都会返回一个数组,该数组中包含从原始数组中删除的项,如果没有删除 任何项,则返回一个空数组。
参数
1.表示开始位置的索引
2.表示删除的额数量
第三个及以后
可以传递一些新的元素,这些元素会自动插入到开始位置索引前边 -
7.concat()
将参数添加到原数组中。这个方法会先创建当前数组一个副本,然后将接收到的参数添加到 这个副本的末尾,最后返回新构建的数组。在没有给 concat()方法传递参数的情况下,它 只是复制当前数组并返回副本。
可以链接两个或多个数组,并将新数组返回
不会对原数组产生影响 -
8.join()
将数组的元素组起一个字符串,以separator为分隔符,省略的话则用默认用逗号为分隔 符,该方法只接收一个参数:即分隔符。
该方法不会对原数组产生影响,而是将转换后的字符串作为结果返回 -
9.reverse()
该方法用来反转数组,该方法会直接修改原数组 -
10.sort()
按升序排列数组项——即最小的值位于最前面,最大的值排在最后面。
可以用来对数组进行排序
也会映像原数组,默认会按照你的编码进行排序 -
11.forEach()
这个方法只支持IE8以上浏览器
对数组进行遍历循环,对数组中的每一项运行给定函数。这个方法没有返回值。参数都是function类型,默认有传参,参数分别为:遍历的数组内容;第对应的数组索引,数组本身。 foEach()方法需要一个函数作为参数
像这种函数,我们创建但不由我们调用,我们成为回调函数
数组中有几个元素函数就会执行几次,每次执行是,浏览器会将遍历的元素
以实参的形式传递进来,我们可以来定义形参,来读取这些内容
第一个参数,就是当前正在遍历的元素
第二个参数,就是当前正在遍历的元素的索引
第三方参数,就是当前遍历的数组
-
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
/**
*
//创建数组对象
*/
var arr=new Array();
console.log(typeof arr);
//向数组添加元素
//语法:数组名[索引]=值;
//如果读取不存在的索引,不会报错而是返回undefined
//对于非连续的数组,使用length会获取数组最大索引+1
//对于非连续的数组,使用length可以获取到数组的长度
arr[0]=1;
arr[1]=2;
arr[2]=5;
var arr2 = new Array(1,2,3,4);
var arr3 = new Array(10);
console.log(arr3.length);
//arr.length=10;
//向数组最后一个位置添加元素
arr[arr.length]=6;
//使用字面量来创建数组语法
var sz=[1,2,3,4,5];
// console.log(typeof sz);
sz=[[1,1],[2,3]];
//console.log(sz[0]);
var shus=["孙悟空","猪八戒","沙和尚"];
//push()
//该方法可以向数组的末尾添加一个或多个元素,并返回数组的新长度
var value=shus.push("白骨精","蜘蛛精");
console.log(value);
console.log(shus);
//pop()
//该方法可以删除数组的最后一个元素,并将被删除的元素作为返回值返回
var zhi=shus.pop();
console.log(zhi);
console.log(shus);
//unshift()
//向数组开图添加一份或多个元素,并返回新的数组长度
//向前边插入元素一会,其他元素索引会一次向后调整
var le=shus.unshift("唐僧","白龙马");
console.log(le);
console.log(shus);
//shift()
//可以删除数组中的第一个元素,并将被删除的元素作为返回值返回
var res=shus.shift();
console.log(res);
console.log(shus);
</script>
</head>
<body>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
//数组遍历
var arr=[1,2,3,4,5,7];
/* for(var i=0;i<arr.length;i++){
console.log(arr[i]);
}
*/
/* 一般都用for循环遍历数组
JS中还提供了一个方法来遍历数组
forEach()
这个方法只支持IE8以上浏览器
foEach()方法需要一个函数作为参数
像这种函数,我们创建但不由我们调用,我们成为回调函数
数组中有几个元素函数就会执行几次,每次执行是,浏览器会将遍历的元素
以实参的形式传递进来,我们可以来定义形参,来读取这些内容
第一个参数,就是当前正在遍历的元素
第二个参数,就是当前正在遍历的元素的索引
第三方参数,就是当前遍历的数组
*/
/* arr.forEach(function(value,index,obj){
//console.log(value);
}); */
//slice()
//可以用来从数组提取指定元素
//该方法不会改变原数组,而是将截取到的远胜于封装为一个先数组返回
//参数
//截取开始的位置索引,包含开始索引
//截取结束位置的索引,不包含结束索引
//第二个参数可以省略不写,此时会截取从开始索引到最后
//索引可以传递负值,如果传递赋值则从后往前计算
//-1倒数第一个 -2倒数第二个
/* var arr=[1,2,3,4,5,6,7];
var sz=arr.slice(1,-1);
console.log(sz); */
//splice()
//可以删除数组中的指定元素
//使用splice()会映像原数组,会将指定元素从原数组中删除
//并将被删除的元素作为返回值返回
//参数
//1.表示开始位置的索引
//2.表示删除的额数量
//第三个及以后
//可以传递一些新的元素,这些元素会自动插入到开始位置索引前边
//arr.splice(2,0,10,20,30);
//console.log(arr);
//concat()可以链接两个或多个数组,并将新数组返回
//不糊对原数组产生影响
var arr=[1,2,3,4,5,6,7];
var arr1=[9,8,7];
var sz=arr.concat(arr1,11,22,33);
console.log(sz);
//join()
//该方法可以将数组转换为一个字符串
//该方法不会对原数组产生影响,而是将转换后的字符串作为结果返回
//在join()中可以指定一个字符串作为参数,链接所有数组中的元素
//如果不指定参数,默认用'’作为链接符
var value=arr.join("@");
console.log(typeof value);
console.log(value);
//reverse()
//该方法用来反转数组,该方法会直接修改原数组
arr.reverse();
console.log( arr);
//sort()
//可以用来对数组进行排序
//也会映像原数组,默认会按照你的编码进行排序
arr.sort();
//console.log( arr);
//对于纯数字的数组,使用sort().也会按照Unicode编码排序
//所以我们可能会的到错的结果
//我们可以自行定制排序规则
//可以在sort()添加一个回调函数来制定规则
arr=[2,1,3,2,5,4,6];
arr.sort(function(a,b){
if(a>b){
return -1;
}else if(a<b){
return 1;
}else {
return 0;
}
return a-b;
});
console.log(arr1);
</script>
</head>
<body>
</body>
</html>
练习题
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
青蛙爬井
/* var i=0;
var n=1;
while(i<10){
i+=5;
if(i>=10)break;
i-=4;
console.log(n++);
} */
/* var gao=0;
var tianSe=true;
var num=0;
do{
if(tianSe){
gao=gao+5;
tianSe=false;
}else{
gao=gao-4;
tianSe=true;
num++;
}
}while(gao<10);
/*
*
***
*****
*******
*********
*/
console.log(num); */
/* var row=5; // row表示总行数
for(var r=1;r<=row;r++){ //外层循环控制行数 r表示每次变化的行数
var triangle=""; //triangle表示最后的三角形
for(var space=r;space<row;space++){ //此循环控制空格数 space表示空格数
triangle+=" ";
}
for(var star=1;star<=2*r-1;star++){ //此循环控制 * 数 star表示*数
triangle+="*";
}
console.log(triangle);
} */
/* for(var row=1;row<=5;row++){
for(var a=1;a<=5-row;a++){
document.write(" ");
}
for(var star=1;star<=2*row-1;star++){
document.write("*")
}
document.write("<br/>");
}
*/
/*百钱买百鸡 */
for(var cockNum = 0; cockNum<= 19; cockNum++){
for(var henNum = 0; henNum <= 33; henNum++){
var poultNum = 100 - cockNum - henNum;
if((cockNum * 5 + henNum * 3 + poultNum * (1/3) === 100) && poultNum % 3 === 0){
console.log("可买公鸡只数:" + cockNum);
console.log("可买鸡母只数:" + henNum);
console.log("可买鸡雏只数:" + poultNum);
}
}
}
</script>
</body>
</html>
</script>
</head>
<body>
</body>
</html>