JavaScript-入门第二周学习笔记3

目录

一、循环结构

二、数组的基础

        7、如何释放一个引用类型

        8、关联(hush)数组

三、数组的API(重点)

1、arr转string

2、数组拼接

3、截取子数组

4、删除、插入、替换

5、翻转数组

6、排序(两种方式)

7、栈和队列

扩展

1、二级联动

2、周期定时器


一、循环结构

        1、while(循环条件){循环体}

        2、do{循环体}while(循环条件)

面试题:while和do..while的区别

        只看第一次:如果第一次两种都满足,两者就没有区别

                              如果第一次不满足,while一次都不执行,do...while至少会执行一次。

        3、for(循环变量;循环条件;循环的变化){循环体;}

        4、流程控制语句

                ①break; //退出整个循环

                ②continue; //退出本次循环,根据需求进行分析使用哪一个

        tip:不确定循环次数的情况下,使用while死循环。

二、数组的基础

        1、基础概念

                在一个内存(变量)中保存了多个数据的一个集合结构。

                一个好的数据结构可以极大的提升程序员开发效率。

        2、创建(js第一周笔记3)

        3、访问(js第一周笔记3)

        4、数据的三大限制(js第一周笔记3)

        5、数组的唯一属性(js第一周笔记3)

        6、遍历数组(js第一周笔记3)

        7、如何释放一个引用类型

                搞清楚引用类型的数据有几个遍历引用着,都要释放后才会真正的释放

                建议:代码都封装在一个函数中,函数中的变量会自动释放。

        小知识:底层会有一个垃圾回收器。其中还有一个计数器。当计数器为0后,垃圾回收器才会出现回收掉数据。

        8、关联(hush)数组

                关联数组的下标是可以自定义的。

                索引数组:下标都是由数字组成的数组。

                使用场景:索引数组的下标无具体的意义,不便于查找。

                使用方式:

                        ①创建:2步

                                Ⅰ 创建空数组

var arr  = [];

                                Ⅱ 为数组添加下标并且添加元素

arr["自定义下标"]=新值;

                        ②访问元素

arr["自定义下标"];

                        ③强调:

                                hash数组length永远失效,永远为0.

                                遍历hash数组,不能使用for循环,必须使用for in循环(专门用于遍历数组)

for(var i in arr){

}

                        for in循环不能定义从那里开始到哪里结束。

                        建议:索引数组依然用for ,hash数组用for in。

                

                        ④hash数组的原理

                        hash算法:将字符串,计算出一个尽量不重复的数字(地址值)
                                           字符串内容相同,则计算出来的数字也一定是相同的
                        添加元素:将自定义下标交给hash算法,得到一个数字(地址值),直接将你要保存的数据放到这个地址之中
                        获取元素:将指定的自定义下标交给hash算法,得到一个和当初保存时一样的数字(地址值),通过地址就找到当前保存的数据

                        ⑤js里面的一切东西都是对象,除了undefined和null,一切对象的底层都是hash数组

三、数组的API(重点)

1、arr转string

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

        固定套路:

                ①笔试题:将数组里面的内容拼接为一句话/单词。

var str = arr.join(" ");

                ②将数组拼接为DOM页面元素

var arr=["北京","南京","西京","东京","重庆"] ;   //数据
//转为字符串,并且拼接好标签
var str="<开始>"+arr.join("</结束><开始>")+"</结束>";
//渲染到DOM树上
elem.innerHTML=str;

2、数组拼接

        添加元素的新方式。把你传入的实参全部拼接到arr的末尾。

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

        特殊:①不修改原数组,只会返回一个新数组。

                   ②concat支持传入数组参数,悄悄的将你传入的数组打散为单个元素后在拼接。

3、截取子数组

        根据你传入的开始下标截取到结尾下标。

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

        特殊:

                ①不修改原数组,只会返回一个新数组。

                ②含头不含尾。

                ③endi可以省略不写,会从starti位置一直截取到末尾。

                ④其实两个是实参都可以省略:从头截尾,深拷贝,和以前的按值传递(浅拷贝)不同,一个修改不会影响到另一个。

以上的API都不会修改数组。

以下的API会修改原数组。

4、删除、插入、替换

        ①删除

var dels = arr.splice(start1,0);    //n代表删除的个数

        特殊:其实splice也有返回值,返回的是你删除的元素组成的一个新数组。

        ②插入

arr.splice(start1,0,值1,...);

        注意:Ⅰ 原starti位置的元素以及后续元素都会向后移动。

                   Ⅱ 千万不要插入一个数组,会导致我们的数组一些是一维,一些是二维,遍历时非常的难受

        ③替换

var dels = arrsplice(starti,n,值1,...)

        注意:删除的元素个数不必和插入元素的个数相同。

5、翻转数组

arr.reverse();    //不使用

6、排序(两种方式)

        ① 面试/笔试时:手写冒泡排序(从第一个元素开始,依次比较相邻的两个元素,只要前一个元素>后一个元素,两者就交换位置)

        var arr = [52, 64, 4, 3, 98, 456, 157, 666];
        冒泡排序
        for (var j = 1; j < arr.length; j++) {
            for (var i = 0; i < arr.length - j; i++) {
                if (arr[i] > arr[i + 1]) {
                    var middle = arr[i];
                    arr[i] = arr[i + 1];
                    arr[i + 1] = middle;
                }
            }
        }

        ②正式的开发中使用排序的API(只在数组中使用)

arr.sort();

        问题1:默认会将元素们转为字符串,按位PK ascii码,如果希望按数字排序?

        解决:

       //升序
        arr.sort(function(a, b) {    //回调函数
            console.log(a);          //拿到后一个元素
            console.log(b);          //拿到前一个元素
            return a - b;            //如果return是一个正数,则后>前,
                                     //如果return是一个负数,则后<前,
                                     //如果return是一个0,则后=前,
                                     //而sort方式正好可以根据返回的正/负/0来进行排序
        })

        问题2:只能升序排序,如何降序?

arr.sort(function(a, b) {
            return b - a;
        })

注意:排序其实非常重要,切记,只要以后页面中有排序功能,他的底层一定是一个数组,因为只有数组具有排序的方法

7、栈和队列

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

        ①栈:其实就是数组,只不过是一端封闭,只能从另一端进出的数组。

                使用场景:优先使用最新的数据,现实生活中,情况不多:公交车、电梯...

                方法:

                Ⅰ开头进

arr.unshift(新值1,...);        //添加元素的新方式,向前添加,缺陷:导致其余元素的下标发生改变

                Ⅱ 开头出

var first = arr.shift();        //删除元素的新方式,向前删除,缺陷:导致其余元素的下标发生改变

                Ⅲ 结尾进

arr.push(新值1,...);        //添加元素的新方式,向后添加,完全等效于arr[arr.length]或者arr.concat

                Ⅳ 结尾出

var last = arr.pop();        //删除元素的新方式,向后删除

        ②队列:其实就是数组,只不过是一端进,另一端出

                使用场景:根据先来后到的顺序。

        开头进:arr.unshift(新值,...);
        结尾出:var last=arr.pop();

        结尾进:arr.push(新值,...);
        开头出:var first=arr.shift();

tip:ES3的数组API到此为止了,后面会补充ES5的API。

扩展

1、二级联动

        1、select专属事件:onchange,状态改变事件。

        2、select具有一个专属属性。

select.selectediIndex()    //直接获取当前选中项的下标

        3、必须用到二维数组。

        4、点开页面时,程序员提前帮用户触发一次。->调用一次函数。

2、周期定时器

        每过一段时间就会执行一次。

        开启:

timer = selnterval(function(){
    操作;
},间隔毫秒数)

        停止:

clearlnterval(timer);

鼠标移入:onmouseenter

鼠标移出:onmouseleave

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值