javascript笔记(三)

1.***循环:
  什么是:让程序反复执行同一代码段
  如何使用:
  三要素:
  1.循环条件: 让循环可以继续反复执行的条件。
  2.循环变量: 在循环条件中,用作比较的变量。
      循环变量总是向着不满足循环条件的趋势变化。
  3.循环体: 循环反复执行的代码段。


  三种:
  1.当循环变量的变化没有规律时
    var 循环变量=值;
    while(循环条件){
       循环体;
       迭代变化循环变量
    }
  2.先执行循环体,再判断循环条件,决定是否继续。
    var 循环变量=值;
    do{
       循环体;
       迭代变化循环变量
    }while(循环条件);
    while vs do while : 只看第一次循环条件是否满足!
    如果第一次条件都满足,则两者完全等效
    如果第一次条件不满足,则:
      while是一次都不执行
      do while至少可执行一次


   总结:退出循环:
    1.用循环条件——优雅,难度大——建议
    2.用break——野蛮,随意,简单!


  3.当循环条件的变化有规律时:
    for(var 循环变量=值;
循环条件;
        迭代变化循环变量){
       循环体;
    }
    特殊写法:
     1.第一部分中:可同时声明并初始化多个变量。
     2.第三部分中:可同时执行多个短小的操作,用逗号分隔。强调:不能修改原执行顺序
     3.死循环: while(true)  for(;;)


补:其实,if,else,for,while,之后只有一句话
   可省略{}——禁止使用


复杂循环:2步:
 1. 截取片段,总结公式

 2. 用循环,反复调用公式




1.***数组:
  什么是:内存中连续存储多个数据的存储空间,再起一个名字。
        数组是引用类型的对象
  为什么: 程序=数据结构+算法
    算法:解决问题的步骤
    数据结构:数据在内存中的组织结构
 好的数据结构,可以极大提高程序的执行效率
  何时使用: 存储一组相关的数据时,就要用数组。
  如何使用: 
    1. 创建:3个场景
     1.创建一个空数组:2种:
       var arr=[]; //创建一个新数组
       var arr=new Array();
               创建 数组
       何时使用:创建数组时,不确定数组元素的内容。
     2.创建数组同时,初始化数组元素:
       var arr=[值1,值2,...];
       var arr=new Array(值1,值2,...);
              创建 数组 向数组中加入...
       何时使用:创建数组时,已经知道每个元素的内容。
     3.创建n个空元素的数组:
       var arr=new Array(n);
               创建 n个空元素的数组
       何时使用:创建数组时,仅知道将来的元素个数,不确定元素内容时。
    2. 访问数组元素:
     先找到数组变量,再使用下标在数组内找到指定位置的元素。
      下标:数组中唯一标识一个元素的存储位置的序号。默认从0开始,连续递增,不重复。
     比如: arr[i] 访问arr数组中下标为i位置的元素。
     每个元素的用法和普通变量,完全一样!
     数组:一组变量的集合,再起一个统一的变量名。


补: 垃圾回收: 清除不再使用的对象,释放存储空间。
      对象:内存中存储多个数据的存储空间
        对象占用的内存比普通变量大
     垃圾回收进程(器):是一个专门负责释放不再使用的对象的小程序。
        js引擎自带,自动执行的,后台程序
    对象生命周期:(垃圾回收的原理)
     1.创建对象时,垃圾回收器会标记该对象的引用计数器为1 
      引用计数器: 记录一个对象被几个变量引用着。 
     2.使用对象过程中,只要多一个变量引用该对象,计数器就+1
     3.主动为一个变量赋值为null时,就释放了该变量对对象的引用。计数器就会-1
     4.如果一个对象不再被任何变量引用,计数器就变为0。垃圾回收就释放对象。


    建议:在使用完一个较大的对象后,都要主动用null释放对该对象的引用。


    强调:三大差别:(三个不限制)
     1. 不限制数组元素的个数
       可随时在任何位置,添加新元素:
       只要为该位置强行赋值,数组就会自动在该位置创建一个新元素
     2. 不限制元素的数据类型
     3. 不限制下标越界
js中数组越界不报错!而是返回undefined


数组的length属性:表示数组中,元素的个数
   固定套路:
     1. 如何获得数组最后一个元素:
       arr[arr.length-1]
       数组的length属性,永远是最大下标+1
        如何获得数组倒数第n个元素:
       arr[arr.length-n]
     2. 如何在数组默认追加新元素:
       arr[arr.length]=新值
       稀疏数组: 数组元素的下标,不连续的数组。而length属性却始终是最大下标+1.
     3. 数组缩容: arr.length-n


数组遍历:依次获取数组中每个元素,对每个元素执行相同的操作。
    for(var i=0;i<arr.length;i++){
arr[i]//当前正在遍历的元素
    }
   索引数组:下标都是数字的数组
***关联数组:
   什么是:可自定义下标名称的数组
   为什么:索引数组的下标没有实际意义
     "范冰冰" 89    65   91
      name    math  chs  eng
   何时使用:只要希望每个元素有特定的意义,就要自定义下标名称。
   如何创建: 2步:
    1. 先创建一个空数组;
    2. 向数组中添加新元素,下标要用自定义的字符串,作为名称。
   关联数组中的length失效,永远为0
  遍历关联数组中每个属性:
    for(var key in arr){
       arr[key]//当前属性值
    }
    in: 依次获取arr中每个属性名
    key: 用来保存in本次返回的属性名
  关联数组,也称为hash数组:
    hash(散列)算法:接收一个字符串,计算出一个尽量不重复的序号。
      特点:
       不同字符串,尽量算出不重复的数字。
       同一个字符串,算出的结果,一定相同
    所以,hash中的下标(key)不可重复,唯一
    存储:先将该元素的下标名称交给hash算法,计算出一个尽量不重复的存储位置。将数据保存到该位置。
    取值:将要查找的下标名称交给hash算法,计算出和存储时完全一致的位置。直接通过地址找到元素。
  索引数组: 查找未知位置的元素,只能靠遍历。缺:受元素个数和元素存储位置的影响极大
  hash数组: 只要知道元素的属性名,不需要遍历,即可直接获得元素的内容。
    优:查找速度极快,且和元素个数和存储位置无关。

数组API:
  数组:封装一组连续的数据,并提供对数据进行操作的API
  1.to str: 2种:
   1.String(arr): 将数组中每个元素转为字符串,并用逗号连接。——拍照
   2.arr.join("连接符"):将数组中每个元素转为字符串,用自定义的"连接符"连接每个元素。
     固定套路:
       1. 无缝拼接: var str=arr.join("")
       2. 将数组中的元素,拼接为页面的html代码
  2.拼接和截取: 都无法直接修改原数组
              而是返回新数组,用变量接住   拼接:
    var newArr=
arr1.concat(值1,值2,arr2,值3,...)
    将值1,值2...拼接到arr1之后,生成新数组,原arr1数组保持不变。
    强调:concat可打散数组类型的参数,逐个元素拼接。
 截取子数组:
    var subArr=arr.slice(starti,endi+1);
    复制出arr中starti位置开始,到endi位置的元素组成新数组返回。
    强调:
     1. 含头不含尾,结束位置要+1
     2. 支持负数参数:表示倒数第n个位置
       其实执行的还是length-n
     3. 如果省略第二个参数,表示从starti位置直接截取到结尾。

  splice: 删除元素,插入元素,替换元素
      直接修改原数组
    删除: arr.splice(starti,n)
      删除arr中starti位置开始的n个元素
      其实,splice方法会返回被删除的元素组成的临时数组。用于后续的操作。
    插入: 
arr.splice(starti,0,值1,值2,...)
      在arr的starti位置插入值1,值2,...,
      原starti位置的值及其之后的值自动向后顺移。
      splice不支持数组类型的参数,无法打散数组。
    替换: arr.splice(starti,n,值1,值2,..)
      先删除starti位置的n个元素
      再在starti位置插入值1,值2,...
颠倒数组中的元素: 直接修改原数组
   arr.reverse();只是机械的将数组颠倒

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值