第二周总和

53 阅读7分钟

1、循环结构:通过条件的判断,看要不要反复执行某些代码块

1、while

var 循环变量=几;

while(循环条件){

循环体;

变量变化;

}

2、for

for(var 循环变量=几;循环条件;变量变化){

循环体;

}

3、do...while:

var 循环变量=几;

do{

循环体;

变量变化;

}while(循环条件)

和while的区别,只看第一次,如果条件满足,两者没有区别,如果条件不满足,while一次都不会执行,do...while至少执行一次

4、死循环:

while(true){循环体}

for(;;){循环体}

5、退出循环的语句:

break - 退出整个循环,搭配死循环使用

continue - 退出本次循环

2、函数的基础:方法,需要先预定义好,以后可以反复使用的代码段

1、创建 - 不会自动使用

function 函数名(){

函数体;

}

2、调用:

在JS里面直接写:函数名(); - 程序员自己写几次就会执行几次

在HTML上绑定事件:

3、以后何时使用函数:

1、不希望打开页面立刻执行

2、希望用户来触发

3、函数是第一等公民

4、每一个独立的功能都要封装为一个函数

4、发现:好像和前辈们提供的函数用法有一点点不一样:parseInt(str) - 带参数的函数

1、创建

function 函数名(形参,...){//形参就是变量,默认值为undefined

函数体;

}

2、调用:函数名(实参,...) 1、自定义Function的深入了解:

1、创建的方式:3种,但是目前只学了2种

1、声明方式:

function 函数名(形参列表){

函数体;

return 结果;

}

2、直接量方式:

var 函数名=function(形参列表){

函数体;

return 结果;

}

2、调用:var result=函数名(实参列表);

3、作用域:

全局:全局变量 和 全局函数,在任何位置都可以使用

函数:局部变量 和 局部函数,只能在函数调用时内部可用

带来了变量的使用规则:优先使用局部的,局部没有找全局,全局没有就报错

缺点:

1、全局用不到局部的,但是搭配上return即可解决

2、不要再函数内对未声明的变量赋值,会导致全局污染,降低性能

4、声明提前:再程序正式执行之前,会悄悄的将var声明的变量(轻)和function声明的函数(重),集中提前到当前作用域的顶部,但是赋值留在原地

5、重载:相同的函数名,根据传入的实参的不同,自动选择对应的函数执行,但是JS不支持,因为同名函数出现,后面的会覆盖前面的

解决:arguments - 类数组对象,跟数组长得很像

作用:哪怕没有形参,也可以接住所有的实参

用法:arguments[1] - 得到的是第二个实参

arguments.length - 获取到传入的实参有几个

变相实现重载:我可以再函数内部判断实参的不同执行不同的操作

2、数组:一个变量可以保存多个数据

1、创建:2种

1、直接量:var arr=[数据,...];

2、构造函数:var arr=new Array(数据,...);

2、访问:arr[i];

3、添加/替换:arr[i]=新数据;

4、数组具有三大不限制:

1、不限制长度

2、不限制类型

3、不限制下标越界:

访问:下标越界 - 得到undefined

添加:下标越界 - 变成稀疏数组,如果搭配上遍历,则为会得到很多undefined

5、数组唯一的属性:arr.length - 获取到数组的长度,最大下标 === 长度-1

三个固定套路:

1、向末尾添加:arr[arr.length]=新值;

2、获取倒数第n个:arr[arr.length-n];

3、删除倒数n个:arr.length-=n

6、遍历数组:往往不是取出某个来使用,而是取出所有来执行 相同 或 相似的操作

for(var i=0;i

arr[i];

} 1、DOM:Document Object Model:文档对象模型,专门用于操作HTML文档的,提供了很多的方法

2、DOM树:树根document对象,可以通过它找到我们需要的元素

3、查找元素:

1、HTML特点

ID:其实不用找,直接可用

标签名和class名:var elems=document/爸爸.getElementsByTag/ClassName("标签名/class名");

没找到是一个空集合,而且集合不能直接用于做操作,要么下标拿到某个元素,要么遍历拿到每个元素

不一定非要从document开始,可以写为一个自己已经找到的父元素

2、关系:前提:至少要先找到一个人,才可使用关系

父:elem.parentNode;

子:elem.children;

第一个儿子:elem.firstElementChild;

最后一个儿子:elem.lastElementChild;

前一个兄弟:elem.previousElementSibling;

后一个兄弟:elem.nextElementSibling;

2、操作元素:

内容:innerHTML(双标签,识别标签)/innerText(双标签,纯文本)/value(input专属)

获取:elem.以上三个中的一个

设置:elem.以上三个中的一个="新值"

属性:

获取:elem.getAttribute("属性名"); ===> elem.属性名

设置:elem.setAttribute("属性名","属性值") ===> elem.属性名="新值"

特殊:简化版:

1、class必须写为className

2、自定义属性不能使用简化版

样式:操作内联

获取:elem.style.css属性名 - 只能获取到内联样式

设置:elem.style.css属性名="css属性值";

绑定事件:我们要让HTML(内容)和CSS(样式)和JS(行为)分离

elem.on事件名=function(){//回调函数,是不需要程序员去调用的,在你点击的时候,会自动调用

操作;

关键字:this->目前只能在事件之中使用

单个元素绑定事件,this->就是这个元素

多个元素绑定事件,this->当前触发事件的元素

} 1、数组的基础 - 填坑

1、创建数组:var arr=new Array(num);//创建了一个长度为num的空数组

2、按值传递:主要看传递的类型

1、如果传递的是原始类型,两者互不影响,因为是复制了一个副本给对方

2、如果传递的是引用类型,两者相互影响,因为是把自己的地址值给了对方 - 浅拷贝

3、释放引用类型,一定要看清楚有几个变量引用着,都要释放后才能是放干净,推荐还是使用函数封装,可以自动释放

2、hash数组:下标是可以自定义的,便于查找

1、创建:2步

1、创建空数组:var arr=[];

2、为空数组添加自定义下标并且赋值:arr["name"]="袍哥";

2、访问:arr["name"]

3、遍历:length失效了,必须使用for in循环

for(var i in arr){

arr[i]

}

4、JS中万物皆对象,除了undefined和null,一切对象的底层都是hash数组

3、*数组的API:这些预定义方法,只有数组可以使用

1、arr to str:var str=arr.join("自定义连接符");

固定套路:

1、无缝拼接:arr.join("");

2、拼接为页面元素:"<开始>"+arr.join("<开始>")+""; - 搭配上innerHTML使用

2、拼接数组:添加元素的新方式

var newArr=arr.concat(新值1,arr2,....);

3、截取子数组:取出某一部分

var subArr=arr.slice(starti,endi+1);

4、删插替:var dels=arr.splice(starti,n,新值1,...);

5、翻转:arr.reverse(); 1、ArrayAPI:

1、排序:

1、笔试时,冒泡排序

2、开发时使用API:

arr.sort();//按字符串排序

arr.sort((a,b)=>a-b);//升序

arr.sort((a,b)=>b-a);//降序

2、栈和队列:这四个方法可以混搭使用

开头进:arr.unshift(新值1,...);

开头出:var first=arr.shift();

结尾进:arr.push(新值1,...);

结尾出:var last=arr.pop();

3、ES5 - 新的API:

1、判断:

var bool=arr.every/some((val,i,arr)=>判断条件);

2、遍历:

arr.forEach((val,i,arr)=>操作);

var newArr=arr.map((val,i,arr)=>操作);

3、过滤:var subArr=arr.filter((val,i,arr)=>判断条件);

汇总:var sum=arr.reduce((prev,val,i,arr)=>prev+val);

2、二维数组:希望在数组中,再次细分分类

var arr=[[],[],[],[]]

访问:arr[行][列]

列下标越界,得到undefined

行下标越界,会报错

遍历二维数组:必须两层循环,外层循环控制行,内层循环控制列

for(var r=0;r

for(var c=0;c

console.log(arr[r][c])

}

}