循环语句
断点调试
浏览器打开调试界面
按F12打开开发者工具
点到source一栏
选择代码文件
while循环
变量起始值2
while(循环/终止条件){
要重复循环的代码(循环体)
变量变化量(自增或自减)
}
大括号里代码执行完毕后不会跳出,而是继续回到小括号里判断条件是否满足,若满足又执行大括号里的代码,然后再回到小括号判断条件直到括号内条件不满足退出循环
循环退出
break退出整个循环
return结束函数
continue退出本次循环,继续下次循环
for循环
for(变量起始值;终止条件;变量变化量){
循环体
}
循环嵌套
外层循环打印行数
内层打印一行的个数
需要换行则在外层循环里在内层循环下面加一句document.write('<br>')
函数
声明
function 函数名(形式参数列表){
函数体
}
调用
函数名(传递的实际参数列表)
传参
形式参数列表=传递的实际参数列表
多个参数用逗号分隔
如果没有输入实参,默认是undefined,undefined+undefined=NaN
可以给形参默认值=0
会优先执行传递的参数
function getSum(x=0,y=0){
document.write(x+y)
}
getSum()结果是0而不是NaN
返回值
return 数据
返回值返回给函数调用者
函数内部不需要输出结果而需要返回结果
数据不要换行写
默认返回值是undefined
函数体中使用return能将内部的执行结果交给函数外部使用
返回多个数据用逗号分隔并用[]括起来return[数据1,数据2]
function 函数名(形式参数列表){
函数体
return 数据(相当于执行函数名(形参)=数据)
}
注意细节
两个相同的函数后面的会覆盖前面的函数
JS中实参个数和形参个数可以不一致
形参过多会自动填上undefined
实参过多则多余的会被忽略(函数内部有一个arguments里面装着所有实参)
函数碰到return就结束
作用域
一段程序代码中所用到的名字并不总是有效可用的,而限定这个名字的可用性代码范围就是这个名字的作用域
只要是代码就至少有一个作用域
如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域
全局作用域
作用于所有代码执行的环境(整个script标签内部)或者一个独立的js文件
局部作用域
作用于函数内的代码环境,就是局部作用域,因为跟函数有关,也叫函数作用域
匿名函数
函数表达式
将匿名函数赋值给一个变量,并且通过变量名称调用
先声明再调用
立即执行函数
避免全局变量之间的污染
写法1:(function(形参){函数体})(实参);
必须要加括号和分号结束,分号加在开端或者末尾都可以
第三个()相当于在调用函数
写法2:(function(形参){函数体}(实参));
转换时间案例
// 转换时间案例
// 计算时分秒
// 小时:h=parseInt(总秒数/60/60%24)
// 分钟:m=parseInt(总秒数/60%60)
// 秒数:s=parseInt(总秒数%60)
let second = +prompt('请输入秒数:')
function getTime(t) {
let h = parseInt(t / 60 / 60 % 24)
let m = parseInt(t / 60 % 60)
let s = parseInt(t % 60)
// 补0
h = h < 10 ? '0' + h : h
m = m < 10 ? '0' + m : m
s = s < 10 ? '0' + s : s
return `转化完毕后是${h}小时${m}分${s}秒`
}
let str = getTime(second)
document.write(str)
对象(object)
一种无序的数据集合
静态特征 用数字、字符串、数组、布尔类型等表示
动态特征 使用函数表示
对象使用
1.声明语法
let 对象名={ }{ }是对象字面量
let 对象名=new Object()
2.对象组成
对象由属性和方法组成
属性 信息或特征(名词)
-
属性都是成对出现,包括属性名和值,它们之间使用 :分隔
-
多个属性之间使用 ,分隔
-
属性就是依附在对象上的变量(外面是变量,对象内是属性)
-
属性名可以使用“ ”或‘ ’,一般情况下省略,除非名称遇到特殊符号如空格、中横线等
let peo={ uname:'张三', age:18, gender:'女' 'birth-area':'中国' }
方法 功能或行为(动词)
- 由方法名和函数组成,用 :分隔
- 方法是依附在对象中的函数
- 多个属性用 ,分隔
- 方法名可以用' '或" ",一般省略,除非名称遇到特殊符号如空格、中横线等
let 对象名={
属性名:属性值,
方法名:function(形参1,形参2){
函数体
}
}
//方法调用
对象名.方法名(实参1,实参2)
3.操作对象
查——对象.属性/对象['属性']
document.write(peo.uname)
document['birth-area']
改——对象.属性=新值
peo.age=20
增——对象.新属性=新值
peo.hobby='足球'
删——delete 对象.属性
delete peo.hobby
4.遍历对象
for...in...语法
- k是变量,必须使用[ ]语法解析
- k是获得对象的属性名,对象名[k]是获得属性值
for(let k in 对象名){
k是属性名,是该对象的属性总和,字符串型,自带''
console.log(对象名[k])
}
遍历数组对象
let students=[
{name:'张三',age:18,gender:'nan'},
{name:'李四',age:18,gender:'nan'},
{name:'lucy',age:18,gender:'nv'}
]
for(let i=0;i<students.length;i++){
console.log(students[i].name)
}
5.内置对象
Math对象的方法
random 生成0-1之间的随机数(包含0不包含1)[0,1)
生成0-10之间的随机数:
Math.floor(Math random()*(10+1))
因为只生成0-1之间的数所以乘以10,放大十倍,但是因为1是取不到的,那么10也取不到,因此再加1以保证10能取到
生成5-10的随机数:
Math.floor(Math.random()*(5+1))+5
生成N-M之间的随机数
Math.floor(Math.random()*(M-N+1))+N
生成4-8的整数
function getRandom(N,M){
return Math.floor(Math.random()*(M-N+1))+N
}
console.log(getRandom(4,8))
取数组元素:
let random=Math.floor(Math.random()*数组名.length)
ceil 向上取整
floor 向下取整
floor和parseInt区别:
floor只能去数字型的整数,parseInt即可取字符串型的整也可取数字型的整
max 找最大数
min 找最小数
pow 幂运算
abs 绝对值
round 四舍五入取整数