JavaScript第二周

190 阅读5分钟

循环语句

断点调试

浏览器打开调试界面

按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 四舍五入取整数