第二周day2

158 阅读3分钟

循环结构

宏观上看:几乎是在一瞬间执行的,【相同的】或【相似的】代码

微观上看:是一次一次按条件判断去执行的,只不过速度很快。

1,while循环

语法:var 变量名=循环的变量:基本是数字
    while(循环条件){
    循环体;
    循环变量的变化;
    }
    
死循环语法:while(true){循环体;}
    

2,do...while循环

语法:var 变量名=循环的变量:基本是数字
    do{
    循环体;
    循环变量的变化;
    }while(循环条件);
    

面试体:while循环和do...while循环的区别;

只看第一次循环条件,如果都满足则没区别;
如果都不满足,则while循环会一次都不执行,而do...while循环则会至少执行一次。

3,for循环

for(var 变量名=循环变量,循环条件,循环变量的变化){
循环体;
}

死循环语法:for(;;){循环体;}

4,退出循环语句

break -> 退出整个循环
continue -> 退出本次循环

5,forEach for in for of - 专门为遍历数组准备的

数组的基础

什么是数组:一个可以保存多个数据的集合;

何时使用:多个相关的数据,都需要集中在一个数组中;

为什么使用:一个好的数组,可以极高的提高我们的开发效率;

1,创建

第一种:直接量方式
    var arr=[数据1,数据2,...];
    
第二种:构造函数方式
    var arr=new Array(数据1,数据2,...);
    缺点:当你创建了只有一个数据的数组,且这个数据是个数字时,它会创建成一个长度为整个数字的空数组。
    var arr=new Array(5);则创建了一个arr.length==5的空数组;
    

2,调用/访问

数组名[下标];
修改/添加:数组名[下标]=新值;
当此下标没有数据时则为添加,当此下标有数据时则新值会修改覆盖掉旧值;
特殊点:访问时:下标越界,会得到undefined;
   修改/添加时:下标越界,变为稀疏数组,会导致下标不连续中间没有数据的下标数值为undefined,
               以后遍历时一定会得到undefined

3,数组的三大不限制

1.不限制类型;
2.不限制长度;
3,不限制下标越界; -> 这是一个缺点,所以不推荐触发

4,数组的唯一属性:数组名.length -> 获取数组的长度

三个固定用法:末尾添加新值:arr[arr.length]=新值;
          获取倒数第n个值:arr[arr.length-n];
            删除倒数n个值:arr.length-=n

5,遍历数组:对数组的中的每一个数值进行【相同】或者【相似】的操作

一般我们不会去单独使用数组中的某一个数值,而是会拿出来全部使用。
而每当我需要用到全部数值时就需要遍历,语法:
  for(var i=0;i<arr.length;i++){
      arr[i] -> 当前次元素
  }

6,数组分为索引数组和关联/哈希(hash)数组

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

关联数组:可以自定义下标的数组;

为什么要使用关联数值: 因为索引数组的下标没有意义,不能见名知意,不便于我们查找。

如何使用:

创建:1,创建一个空数组:
        var arr=[];
     2,为这个空数组添加自定义下标并赋值:
        arr["自定义下标"]=新值;
        
访问:arr["自定义下标"];

强调:hash数组的length会失效,长度永远为0;
问题:hash数组的length失效,就不能用for循环遍历。
解决:hash数组的遍历必须使用 for in循环遍历数组,比如:
for(var i in 数组名){
    i -> 自动获得当前数组的所有下标,不许要我们设置从哪里开始到哪里结束;
    arr[i] -> 当前次元素
}
牛逼点:不仅可以遍历hash数组,索引数组也可以使用;
但是还是建议hash数组使用for in循环,索引数组使用for循环。

js中一切东西都是对象,万物皆对象,除了undefined和null,【一切对象的底层都是hash数组】