javascript笔记3

87 阅读2分钟

1、***循环结构:宏观几乎是一瞬间执行的,相同 或 相似的 代码

 1、*var 循环变量=几;
      while(循环条件){
	操作;
	变量变化;
       }
             var i = 10;
             while (i < 10) {
             console.log(i + "hello world");
             i++;
             }

2do...while循环语法:
      var 循环变量=几; 
      do{
	操作;
	变量变化;
       }while(循环条件)
           var i=10
           do{console.log(i+"hello world")
            i++}wlie(i<10)

面试题:whiledo...while的区别?
	只看第一次,如果大家都满足,则没区别
            如果不满足,while一次都不执行,而dowhile至少会执行一次
      
3、*for(var 循环变量=几;循环条件;变量变化){
	操作;
      }

4、*退出循环语句:
	break - 退出整个循环
	continue(扣门的蘑菇鹰变成了巫医) - 退出本次循环

5、死循环:while(true){}		for(;;){}

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

2、*****数组的基础:

1、什么是数组:一个集合可以保存多个数据
         何时使用:多个相关的数据,都要集中的定义在一个集合中
         为什么:因为一个好的数据结构,能够极大的提升我们程序员的开发效率

2、创建:2种
	1、*直接量方式:var arr=[值1,...];
	2、构造函数方式:var arr=new Array(值1,...);
			坑:new Array(num); - 懂不起:以为你是创建了一个长度为num的空         数组

3、访问:数组名[下标];
     添加/修改:数组名[下标]=新值;
     特殊:访问时,下标越界 - 返回undefined
               添加时,下标越界 - 变为稀疏数组,导致下标不连续,导致以后遍历一定会得到                         undefined

4、数组三大不限制
	1、不限制类型
	2、不限制长度
	3、不限制下标越界 - 不推荐

5、数组唯一的一个属性:数组名.length - 获取数组的长度
	三个固定套路:
		1、末尾添加:arr[arr.length]=新值
		2、获取倒数第n个:arr[arr.length-n];
		3、缩容:arr.length-=n;

6、遍历数组:对数组中的每个元素执行 相同 或 相似的操作
	for(var i=0;i<arr.length;i++){
		arr[i];//当前次元素
	}

7、*如何释放一个引用类型:看清楚此引用类型有几个变量关联着,每个变量都要释放后,才能真正             的释放干净
                    只是保存了地址值
		var arr1=[1,2,3,4,5];
		var arr2=arr1;
		
		arr2=null;//arr2释放了地址值,arr1依然保存着,所有不会被释放成功
		arr1=null;
		
		console.log(arr1);
		console.log(arr2);

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

       索引数组:下标都是由数字组成的数组
8、*关联(hash)数组:下标是可以自定义的数组
           为什么:索引数组的下标无具体的意义,不便于查找
       如何使用:
	1、创建:2步
		1、创建一个空数组:var arr=[];
		2、为数组添加自定义下标并且赋值:arr["自定义下标"]=新值
	     
	2、访问:arr["自定义下标"]

	3、强调:hash数组length永久失效,永久为0!
	     问题:hash数组不能使用for遍历,必须使用 for in循环遍历数组,语法:
		for(var i in 数组名){
			console.log(i);//自动获得当前数组的所有的下标,不需要我们去设置从哪里开始到哪里结束
			console.log(arr[i]);//当前次元素
		}
	     牛逼:不光可以遍历hash数组,也可以遍历索引数组:
	     建议:hash用for in,索引用for

	4、*js中一切东西都是对象,万物皆对象,除了undefined和null,【一切对象的底层都是              hash数组】
            备注:构造函数的  nem array(num) 只有一个值的时候,懂不起以为你创建了一个num长               var st = new Array(1);
          console.log(st);度的空数组

3、*****数组的API:数组的函数,前辈们定义好的,只有数组可以使用

  1、*****arr 转为 str(字符串):
1、语法:var str=arr.join("自定义连接符");
	作用:
	   1、鄙视时:给你一个数组,将他无缝拼接在一起:
		var arr=["h","e","l","l","o"];
		var str=arr.join("");
		console.log(str);

	   2、拼接为页面元素:
		//以后从数据库中取出数据
		var cities=["-请选择-","北京","南京","西京","东京","重庆"];
		//拼接成页面元素后,innerHTML是识别标签的
		sel.innerHTML="<option>"+cities.join("</option><option>")+"                                 </option>";

  2、*拼接数组:添加元素的新方式:
语法:var newArr=arr.concat(值1,arr1,...);
     var arr = [1, 2, 3, 4, 5];
     var arr1 = [10, 20, 30, 40];
     var newArr = arr.concat(6, 7, 8, 9, arr1);
     console.log(arr);
     console.log(newArr);
特殊:1、此方法不修改原数组,只会返回一个新数组
           2、支持传入数组参数,悄悄的将我们传入的数组打散,不会变成二维数组

   3、*截取子数组:取出数组中想要的某一部分组成的一个新数组
语法:var subArr=arr.slice(starti,endi);(开始,结束)
特殊:1、此方法不修改原数组,只会返回一个新数组
           2、含头不含尾
           3、第二参数可以省略不写,截取到末尾
           4、第一个参数也可以省略不写,如果两个参数都没写,从头截取到尾 - 深拷贝(复制了一份副本)
           5、支持负数参数,-1代表倒数第一个

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

以下的API都会修改原数组

   4、*删除、插入、替换:
删除:var dels=arr.splice(starti,n);//n代表删除的个数
    特殊:此方法其实也有返回值,返回的就是你删除的元素组成的一个新数组
插入:arr.splice(starti,0,新值1,....);
    特殊:1、没有删除,也有返回值,返回的是一个空数组
               2、原starti位置的元素以及后续元素都会向后顺移
               3、不建议插入数组,会变得不伦不类
替换:var dels=arr.splice(starti,n,新值1,....);
    特殊:删除的个数和插入的个数不必相同

   5、反转数组:arr.reverse();

1

 1、二级联动:关键点:
1、必须有二维数组:再次细分分类
2、select的专属事件:onchange -> 只有选中项发生变化
3、select的专属属性:select.selectedIndex -> 获取到当前选中项的下标,但是只有select自带此功能
4、其实事件名其实就是函数名
 2、思考题:随便写一个全是数字组成的数组,乱的,排序 ,不准用我没教过的API
   4、创建两个数组,一个arr1数组全部放着国家的名称,另一个arr2数组是一个空数组,页面上有4个按钮:
>>:把arr1里面所有的东西全部放到arr2中
<<:把arr2里面所有的东西全部放到arr1中
   >:把arr1里面的第一个元素放到arr2的末尾
   <:把arr2里面的第一个元素放到arr1的末尾
只需要每次点击在控制台输出,让我看到数组的变化即可
案例 <body>
  <select id="sel1"></select>
  <select id="sel2"></select>

 <script type="text/javascript">
  //生成一级的数据
  var cities = ["-请选择-", "北京", "南京", "西京", "东京", "重庆"];
  //			//二维数组:再次细分分类
  var arr = [
    ["-请选择-"],
    ["朝阳区", "海淀区", "东城区", "西城区"],
    ["南京1", "南京2", "南京3", "南京4"],
    ["西京1", "西京2", "西京3", "西京4"],
    ["东京1", "东京2", "东京3", "东京4"],
    ["渝中区", "九龙坡区", "江北区", "渝北区"],
  ];

  sel1.innerHTML =
    "    <option>" + cities.join("</option><option>") + "</option>";

  sel1.onchange(只有选中项发生变化 ,select的专属事件) = function () {
    var i = this.selectedIndex;(获取到当前选中项的下标,但是只有select自带此功能)
    sel2.innerHTML =
      "<option>" + arr[i].join("</option><option>") + "</option>";
  };
  sel1.onchange();
</script>
</body>