• JS 6


    犀牛书

    前端大全

    正课:

    1. ***数组:

       什么是:

       为什么:

       何时:

       如何: 创建,访问元素,遍历

    1. ***数组:

       什么是: 内存中连续存储多个数据的一块存储空间

          vs 变量:  内存中存储一个数据的存储空间

       为什么: ***程序=数据结构+算法

                    算法: 解决问题的步骤

                    数据结构: 数据在内存中的存储结构

                        好的数据结构可以极大提高程序的执行效率

       何时: 今后,只要连续存储多个相关的数据,都要用数组

       如何: 创建,访问元素

          创建: 3个场景:

             1. 创建空数组: var 变量=[];

                                                 =new Array();

                 何时: 在创建数组时,暂时不知道数组中的元素内容

             2. 创建数组时,初始化数组内容:

                                    var 变量=[值1,值2,...];

                                                 =new Array(值1,值2,...);

                 何时: 在创建数组时,已经知道元素的内容

                 强调: 每个元素之间,必须用逗号分隔

             3. 创建n个空元素的数组: var 变量=new Array(n);

                 何时: 在创建数组时,仅知道元素的个数,暂时不知道元素的内容。

        访问数组中的元素:

           下标: 数组中唯一标识每个元素存储位置的序号

                  默认从0开始,连续不重复

           arr[i]: 访问arr数组中下标为i位置的元素值

              数组中每个元素的用法和普通变量完全一样。

              其实,数组也是一组变量的集合,再起一个统一的变量名

        三个不限制:

           1. 不限制元素的数据类型

           2. 不限制元素的个数

           3. 不限制下标越界:

                  赋值: 如果下标越界,不报错!而是在指定位置自动添加新元素。——稀疏数组: 下标不连续的数组

                  取值: 如果下标越界,不报错!而是返回undefined

        length属性: 记录理论上数组的元素个数

                     length永远是最大下标+1

           固定套路:

              1. 最后一个元素: arr[arr.length-1]

              2. 倒数第n个元素: arr[arr.length-n]

              3. 在末尾追加新元素: arr[arr.length]=值

              4. 清空数组: arr.length=0;

              5. 删除末尾最后一个元素: arr.length--;

              6. 删除末尾的n个元素: arr.length-=n;

        遍历: 依次访问数组中每个元素:

           for(var i=0;i<arr.length;i++){

               arr[i]//当前元素

           }

           何时: 今后只要对数组中每个元素执行相同的操作时

    ***数组是引用类型的对象:

        数据类型: 基础类型: 值直接存储在变量本地的数据类型

                        引用类型: 值无法保存在变量本地的数据类型

                            数据实际存储在变量外的一个独立存储空间

                                同时存储多个数据的一块存储空间-对象

                                每个对象都有唯一的内存地址

                            变量中仅保存对象的地址值!

                            访问变量等效于通过地址值找到具体对象去访问

        数组就是引用类型的对象

    ***按值传递:

        两变量间赋值,或将变量作为参数传入函数时,其实仅将原变量中值,复制一个副本给对方变量:

           对基础类型: 修改新变量的值,不影响原变量;

           对引用类型: 仅复制对象的地址给对方,不创建新对象

                              通过新变量修改对象,等效于修改原对象

    null vs undefined

      undefined: 空, 专门用于程序自动给变量初始化空值

      null: 空, 专门用于程序员主动释放对一个对象的引用

         垃圾回收: 内存中引擎会自动释放不再被任何变量引用的对象

         垃圾回收器: 在内存中自动执行的小程序

                            自动释放不被任何变量引用的对象

         好的习惯: 只要一个对象不再使用,都要主动将变量置为null

    正课:

    1. ***数组:

        关联数组:

        API:

          转字符串

          拼接和选取

          修改

          翻转

    1. 关联数组:

       索引数组: 下标为数字的数组

       问题: 每个元素,只有值,没有有意义的名称

       解决: 关联数组: 可自定义下标名称的数组

       如何:

          创建: 2步: 1. 先创建空数组: var scores=[]

                           2. 在空数组中添加新元素,使用自定义的下标名

                                  scores["MATH"]=81;

          访问元素: 用自定义的下标名称:

                scores["MATH"] 用法和普通变量完全一样

       关联数组原理:

           hash算法: 散列: 接收一个字符串,然后根据字符串计算出一个尽量不重复的数字。

               相同字符串,计算出的数字一定相同

               不同的字符串,计算出的数字几乎不同的

           关联数组: hash数组

              存入元素: 将下标名交给hash算法,计算出一个尽量不重复的序号,将元素存储到数组中序号指定的位置

              获取元素: 将下标名交给hash算法,计算出和存入时完全一样的序号,直接去数组中序号位置获取元素值——不用遍历

        为什么: 1. 因为下标有意义,便于维护

                     2. 查找极快——和总元素个数以及存储位置无关!

        何时: 1. 今后只要快速查找某个元素时,都用hash数组

                 2. 今后只要存储有意义的一组元素时,都用hash数组

        鄙视: 谈谈对hash的理解:

          hash算法; 存入;  获取;   优;

       特点: length属性失效,永远为0

       遍历: for in循环:

          for(var key in hash){//in依次获得每个元素的下标名称

             key//自动获得当前元素的下标名

             hash[key]//当前元素值

          }

    2. 数组API: 浏览器已经实现的,我们直接用的函数

        数组对象: 存储一组数据,提供操作数据的API

        1. 数组转为字符串: 2种:

            1. var str=String(arr): 将arr中每个元素转为字符串,再用逗号链接成一个字符串。

            2. 可自定义连接符:

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

                固定套路: 1. 无缝拼接: arr.join("")

                                2. 判断数组是空数组: arr.join("")===""

                                3. 动态生成页面元素的内容

  • 相关阅读:
    服务上线怎么兼容旧版本?
    abstract class和interface有什么区别?
    Anonymous Inner Class (匿名内部类)是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
    寒假每日日报49(开发家庭记账本APP——进度十)
    寒假每周总结7
    寒假每日日报48(开发家庭记账本APP——进度九)
    寒假每日日报47(开发家庭记账本APP——进度八)
    寒假每日日报46(开发家庭记账本APP——进度七)
    寒假每日日报45(开发家庭记账本APP——进度六)
    寒假每日日报44(开发家庭记账本APP——进度五)
  • 原文地址:https://www.cnblogs.com/Hale-Proh/p/7199614.html
Copyright © 2020-2023  润新知