第二周第二天笔记

89 阅读3分钟

一、*****数组的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