数组的API、引用/对象类型、定时器、鼠标移入移出

66 阅读3分钟

数组的API

栈和队列

  • 添加元素和删除元素的新方式

  • 其实就是数组,只不过是一端封闭了,只能从另一端进出
  • 如何使用:
    • 开头进:arr.unshift(新值,...);//添加元素的新方式,向前添加,缺点:导致其余元素的下标都发生变化
    • 开头出:var first=arr.shift();//删除元素的新方式,向前删除,一次只能删除一个,缺点:导致其余元素的下标都发生变化
    • 结尾进:arr.push(新值,...);//添加元素的新方式,向后添加。
    • 结尾出:var last=arr.pop();//删除元素的新方式,向后添加。

队列

  • 其实就是数组,只不过一端进,从另一端出
  • 如何使用:
    • 开头进:arr.unshift(新值,...);
    • 结尾出:var last=arr.pop();
    • 结尾进:arr.push(新值,...);
    • 开头出:var first=arr.shift();

二维数组

  • 数组的元素,又引用着另一个数组
  • 何时:在一个数组,希望再次细分每个分类
  • 创建:
var arr=[
	["xx",18,900],
	["yy",19,1000],
	["zz",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

判断: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 判断条件;
})

遍历

  • forEach - 直接修改原数组
arr.forEach(function(val,i,arr){
	直接做你想要的操作;
})
  • map - 不修改原数组返回一个新数组
var newArr=arr.map(function(val,i,arr){
	return 直接做你想要的操作;
})

过滤和汇总

  • filter过滤:筛选出你需要的部分,但是和现实不一样的是原数组并不会发生变化
var subArr=arr.filter(function(val,i,arr){
    return 判断条件;
})
  • reduce汇总:
var result=arr.reduce(function(prev,val,i,arr){
    return prev+val;
},基础值)

ES6箭头函数

  • 简化一切匿名回调函数的
  • 固定公式:
    • function去掉,()和{}之间添加=>,
    • 如果形参只有一个,那么()可以省略,
    • 如果函数体只有一句话,那么{}也可以省略,
    • 如果函数体只有一句话并且是return,那么return和{}都可以省略

String的概念

什么是字符串

  • 多个字符组成的【只读】字符【数组】

和数组有相同点

  • 字符串中的个数:str.length;
  • 获取字符串中的某个字符:str[i];
  • 遍历字符串
  • 所有数组不修改原数组的API,字符串也可以使用(concatslice

和数组不同的地方

  • 所有数组的直接修改原数组的API,字符串都不可以使用,比如排序只有数组可以使用,但是,字符串也有很多很多属于自己的API

引用/对象类型:11个

  • String Number Boolean -> 包装类型
  • Array *Function Date(日期) Math(数学) *RegExp(正则:验证)
  • Error(错误)
  • Object(面向对象开发方式)
  • Global(全局对象)- 只有在浏览器中被window对象代替了, 自然保存着全局变量和全局函数,只不过window可以省略不写,有一天我们会去学习node.js这个后端语言,而在node.js中全局对象就叫做global

包装类型

  • 专门用于将原始类型的值封装为一个引用类型的对象的
  • 为什么:原始类型的值原本就是没有任何属性和方法,意味着原始类型本身是不支持.去做任何操作的,为了方便我们程序员将这三个人提供了包装类型(提供了属性和方法)
  • 何时使用:只要你试图使用原始类型的变量调用属性或方法的时候,自动包装
  • 何时释放:方法调用完毕后,自动释放包装类型,又变成了原始类型
  • 为什么null和undefined不能使用--没有给他们俩提供包装类型

定时器、鼠标移入移出

  • 定时器开启:
timer=setInterval(function(){
操作;
  },间隔毫秒数)

  • 定时器停止:clearInterval(timer)
  • 鼠标移入:onmouseover
  • 鼠标移出:onmouseout