一、day03
1)Boolean() 和!!other效果一样 同样是转换为布尔性
2)NaN和任何的值比较都不相等,即使和它本身的值相比较也不相等
3)循环结构(while,do-while,for)
a.循环的特征:循环条件,循环操作
b.循环使用的步骤:1、找出循环的条件和循环的操作
2、代入响应的循环语法结构中
3、判断能否退出循环,不能出现死循环
c.while
while(循环的条件){//循环的操作 循环体}
d.do-while循环
do{ //循环操作 } while(循环条件)
while与do-while的特点:while先判断后执行,do-while先执行一次,在判断。在初始条件不满足的情况下,while循环体不会被执行,do-while循环会被执行一次。while和do-while常用于循环次数不确定的情况下。
e)for循环
for(变量初始化 ;循环条件 ;变量更新){ //循环主体:循环操作}
执行流程:进入for循环结构
1、变量初始化操作,通常做循环变量的初始化
2、判断循环条件
3、如果循环条件为true,则执行循环体,如果循环条件为false,则跳转到第6步
4、执行变量更新的表达式,通常是做循环变量的更新
5、回到第二步继续
6、退出循环结构
for循环常用于循环次数确定的情况
程序出现逻辑错误时,通常使用断点调试查找错误;
a.设置断点
b.启动调试
c.单步执行
d.观察变量变化,如果和预期变化一致,回到第C步骤
e.如果变量变化和预期的变化不一致,则找到错误点,结束调试,修改错误
跳转语句:
break:跳出break语句所在的那个循环结构,如果循环还有为执行到的语句,不在执行
continue:结束continue所在循环的当前一次循环,还会继续判断条件执行下一次循环。
二、day04
函数的使用
函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。
封装:隐藏内部实现细节,向外提供公共接口
定义函数
声明函数的语法结构:
function 函数名([形式参数列表]){
//函数主体:代码块锁需要实现功能的语句
//[return 表达式];
}
说明:在语法结构中,使用【】括起来的内容表示是可选内容
调用函数:对于函数来说,需要在声明后被调用到才会起作用,调用语法:函数名(【实际参数列表】);
函数调用时所传递的实际参数个数可以不等于形式参数个数,当实际参数个数少于形参个数时,形参中未接到数据的变量默认为Nudefined‘;如果实参个数大于形参个数,则默认忽略到多余的参数。
参数:形式参数(形参):即在函数声明时给定的参数,是函数在被调用时预期接收到的外部数据------变量的声明
实际参数(实参):即在函数调用时传递的参数。
返回值:return表达式,将函数执行的结果返回到函数外部区,以供函数调用者继续使用函数最终处理的结果
return返回值返回到函数调用处;
return只能返回最多一个值,在函数中遇到return语句,则结束函数执行,如果在return后还有没执行的语法,不在执行
跳转语句:break;continue;return表达式;
变量作用域:变量定义之后的作用范围
在函数中变量的作用域是函数级的,即在函数中任何地方定义的白能量,都在它所在的整个函数中可用,但当超出函数范围后,则不能在继续使用。
JS中没有块级作用域,只有函数级的作用域
变量声明的提升:(hoisting)--预编译/预解析
会将所有var变量的名称提升到函数顶部,只把声明提升到顶部,赋值还是保持在原位
递归的使用:
函数体的内部实现函数自身的调用。
菲布拉锲数列(兔子数列):1,1,2,3,,5,8.。。。。。
数列前两项固定为1,从第3项开始,每一项为前两项之和,求解。。第二十组共有多少只兔子?
事件和函数的关系:
onclick--点击
匿名函数:
function(【形参】){//函数体}
函数表达式
var fn=function([形式参数]){ //函数体 }
构造函数(了解)
作用:用于对象的创建,通常是使用new调用
function 构造函数名([形参]){ //函数主体 }
三、day05
数组:为了解决大量数据保存问题
数组概念:存储大量数据的一种存储结构
元素:数组中存储的数据
下标:数组中元素的编号(索引),编号从0开始,到(数组元素个数-1)
长度:数组中元素个数
数组的定义方式:
方式一:var arr=new Array();//创建一个空的数组对象[]
方式二:var arr=new Array(5);//创建一个拥有5个初始空间的数组对象
方式三:vararr=new Array("adfa","55","adfasf");//创建一个数组对象的同时初始化各元素的值,
方式四:var arr=["abc",“dafae”];//直接量,相当于是new Array(“”,“”)的简写方式
JS是弱类型语言,意味着在数组中的每个元素可以是不同的数据类型。但在编码过程中不推荐使用不同数据类型,即在使用数据组时应人为的保存在同一个数组中数据类型相同
常用的数组属性与方法:
调用的方法结构:
数组名.属性
数组名.方法名([实参])
属性:length--获取/设置数组中元素的个数
方法:
添加元素:(添加元素后会自动更新数组长度)
push(elem0,elem1,elem2...)----向元素的末尾添加元素,放回数组的长度
splice(index,0,elem0,elem1,elem3)-----在数组index下标出添加元素,在做添加操作时,第二个元素固定为0
unshift(elem0,elem1,elem2..)------向数组头部插入元素
删除元素:
pop()从尾部删除元素,删除最后一个元素,把所删除的元素组返回
splice(index,len)----从数组Index下标处删除len个元素。并返回删除的元素
shift()---从数组头部删除一个元素,并返回删除的元素。
排序:
reverse()---反转;
sort----排序;
链接:
concat()---链接一个或多个数组,不会改变现有数组的内容,仅仅会返回一个被链接过后的副本
join(spe)-----将数组中的元素用指定的符号链接成一个字符串,默认使用逗号,spe用来定义链接的符号
子数组元素的截取:
slice(start ,end)----从star(包含)t索引出开始,截取到end(不包含)索引结束处,省略第二个参数时默认截取到最后
迭代(遍历数组元素):最基本用到for循环来作遍历
for(var i=0;i<scores.length;i++){
sum+=score[i]; }
for-in
for(var 临时变量 in数组名){//循环体 数组名【临时变量】}
当使用for-in遍历迭代数组元素时,临时变量指代的是数组中元素的数字下标
for-in也可用于对对象的可被遍历的属性做迭代操作。
对象(object):
数组就是一个对象
语法:var stu={
name:"张三",
age:18
}
对象的调用==》 stu.name,stu.age
var persan={
name:"张三",
age:22,
sex:"male"
};
for(var attr in person){//在遍历对象时的临时变量指代的就是对象的对象属性名称
cossole.log(attr);//获得对象的属性名称
console.log(person[attr]);//获得对象中属性的属性值
}
排序算法
冒泡排序,选择排序,插入排序,快速排序,希尔排序......
冒泡排序:两两相邻的元素向比较,按照升序或降序排序,使用二重循环来实现,外层循环控制比较的轮数,内层循环控制每轮的比较次数
外层循环N-1,内层循环N-1-i (N=array.length,循环变量初始值为0;)
sort()方法说明:不使用参数,实际按照数组中元素字符串的字符编码(unicode)顺序升序排序
如果需要按照特定的顺序排序,则提供比较函数
比较函数有两个参数a,b,这两个参数的意思是待比较的两个元素。如果实现升序排序,则返回值规则为return a-b升序,return b-a降序排序
如何实现随机顺序的排序?
字符编码:ASCII,GBK,GB2312,BIG5,unicode(统一码,万国码)-->utf_8,utf-16;
基本类型和引用类型内存结构:
栈内保存的是数据和地址
堆内存里保存的是对象
arguments:类似于数组的对象,代表的是函数的参数列表,只在函数中用到,类似于数组的对象,可以使用到.length属性求解参数个数,但不能使用数组的方法,可以使用arguments[index]的方式访问参数列表中的某个元素。