一、*****数组的API:
1、栈和队列:添加元素和删除元素的新方式:
栈:其实就是数组,只不过是一端封闭了,只能从另一端进出
何时:现实生活中,情况不多:电梯、旅游巴士... 优先使用最新的数据
如何使用:
开头进:arr.unshift(新值,...);//添加元素的新方式,向前添加,缺点:导致其余元素的下标都发生变化
开头出:var first=arr.shift();//删除元素的新方式,向前删除,一次只能删除一个,缺点:导致其余元素的下标都发生变化
结尾进:arr.push(新值,...);//添加元素的新方式,向后添加。
结尾出:var last=arr.pop();//删除元素的新方式,向后添加。
队列:其实就是数组,只不过一端进,从另一端出:
开头进:arr.unshift(新值,...);
结尾出:var last=arr.pop();
结尾进:arr.push(新值,...);
开头出:var first=arr.shift();
ES3的数组的API你就算是学完了,ES5还提供了6个API等你们学习
二、二维数组:数组的元素,又引用着另一个数组
何时:在一个数组,希望再次细分每个分类
创建:
var arr=[
["预判",18,900],
["王刘振",19,1000],
["干湿唱",20,700]
];
访问:arr[行下标][列下标];
特殊:列下标越界,返回undefined
行下标越界,得到是一个报错,因为行下标越界已经得到一个undefined,undefined没有资格在加[]做操作
遍历二维数组:必然两层循环,外层循环控制行,内层循环控制列
for(var r=0;r<arr.length;r++){
for(var c=0;c<arr[r].length;c++){
console.log(arr[r][c]);
}
}
三、ES5还提供了3组6个API:
1、判断:2个
every:每一个,要求所有元素都满足条件才会为true,只要有一个不满足则为false,非常类似于我们的&&
var bool=arr.every(function(val,i,arr){
//val - 当前的值
//i - 当前的值的下标
//arr - 当前数组本身
return 判断条件;
})
some:有一些,要求只要有一个元素都满足条件会为true,所有元素都不满足则为false,非常类似于我们的||
var bool=arr.some(function(val,i,arr){
return 判断条件;
})
2、遍历:拿到数组中的每个元素做相同 或 相似的操作
forEach - 直接修改原数组
arr.forEach(function(val,i,arr){
直接做你想要的操作;
})
map - 不修改原数组返回一个新数组
var newArr=arr.map(function(val,i,arr){
return 直接做你想要的操作;
})
3、过滤和汇总:
过滤:筛选出你需要的部分,但是和现实不一样的是原数组并不会发生变化
var subArr=arr.filter(function(val,i,arr){
return 判断条件;
})
汇总:
var result=arr.reduce(function(prev,val,i,arr){
return prev+val;
},基础值)
以上6个API都是在简化我们的for循环操作,以后数组我们可能真的不会再写for循环
ES6箭头函数:简化一切匿名回调函数的:
固定公式:function去掉,()和{}之间添加=>
如果形参只有一个,那么()可以省略
如果函数体只有一句话,那么{}也可以省略
如果函数体只有一句话并且是return,那么return和{}都可以省略
四、*****String的概念:
1.什么是字符串:
多个字符组成的【只读】字符【数组】(只读:明天我们要学习的所有的字符串的API都不会修改原字符串,都会返回一个新的字符串)
2.和数组有相同点:
1、字符串中的个数:str.length;
2、获取字符串中的某个字符:str[i];
3、遍历字符串
4、所有数组不修改原数组的API,字符串也可以使用(concat、slice)
3.和数组也有很多不同的地方:
所有数组的直接修改原数组的API,字符串都不可以使用,比如排序只有数组可以使用,但是
字符串也有很多很多属于自己的API,等待我们明天学习
4.***引用/对象类型:11个
*String Number Boolean -> 包装类型
*Array *Function Date(日期) Math(数学) *RegExp(正则:验证)
Error(错误)
*Object(面向对象开发方式)
Global(全局对象)- 只有在浏览器中被window对象代替了, 自然保存着全局变量和全局函数,只不过window可以省略不写,有一天我们会去学习node.js这个后端语言,而在node.js中全局对象就叫做global
5.***包装类型:
专门用于将原始类型的值封装为一个引用类型的对象的
为什么:原始类型的值原本就是没有任何属性和方法,意味着原始类型本身是不支持.去做任何操作的
但是前辈们发现字符串经常会被我们程序员所操作,为了方便我们程序员将这三个人提供了包装类型(提供了属性和方法)
何时使用:只要你试图使用原始类型的变量调用属性或方法的时候,自动包装
何时释放:方法调用完毕后,自动释放包装类型,又变成了原始类型
为什么null和undefined不能使用. - 因为前辈们没有给他们俩提供包装类型
作业扩展知识:(轮播图)
1、周期性定时器:每过一段时间就会自动执行一次
开启:timer=setInterval(function(){
操作;
},间隔毫秒数)
停止:clearInterval(timer)
2、鼠标移入:onmouseover
3、鼠标移出:onmouseout