前端攻城狮---js之语法基础(3)

匿名 (未验证) 提交于 2019-12-03 00:30:01

数组

什么是数组?数组是一组有序的数据集合。

定义方式

1.最简单的方式,数组字面量。var list = [1,2,3,4,5,6];

2.通过new的方式创建,这里涉及到对象的概念,后面会细说。

数组元素的引用

现在有这个一个数组,var list = [1,2,3,4,5,6,7];此时我想要读取数组中第3个数据,要怎么读取?

var num_3 = list[2],这里有人会问,我不是读取第3位吗怎么要从第2位读取?因为数组的索引的下标是从0开始,也就是说数组中的第一位对应的是list[0],数组的第二位对应的是list[1]。

数组的长度

数组的长度需要通过数组的一个属性length来获取,如list.length,此时的值是7。那么数组的索引最大的下边就是length-1。

数组的循环

我们来定义一个循环,去获取到数组里的数据。


console.log(arr[i]);

数组中常用的方法

  • pop() push()


    var arr = [1,2,3,4,5,6,7,8]; 	    console.log(arr.length+" "+arr); 	    // 定义一个循环 	    console.log("pop "+arr.pop()+" "+arr.length+" "+arr); 	    console.log("push "+arr.push(9)+" "+arr.length+" "+arr);

  • shift() unshift()



   var arr = [1,2,3,4,5,6,7,8]; 	    console.log(arr.length+" "+arr); 	    // 定义一个循环 	    console.log("shift "+arr.shift()+" "+arr.length+" "+arr); 	    console.log("unshift "+arr.unshift(9)+" "+arr.length+" "+arr);



slice(1,5)表示获取该数组的下标1-5的数组,不过[1,5),不包括5,所以获取到了4个数据。

  • reverse()

数组的逆序,颠倒数组的顺序。

  • splice()

我们可以通过splice去添加 删除 替换数组。splice(index,howmany,item....item)方法可以填写三个参数,第一个是从第几个item开始操作,第二个参数表示要删除的数量,第三个表示添加的数据。

添加数据

    var arr = [1,2,3,4,5,6,7,8]; 	    arr.splice(1,0,"hahaha"); 	    console.log(arr);

我们可以看到第一个参数1,表示在第一项之后,第二个0表示删除0个,第三个参数表示要添加的数据。

删除数据 如我要删除第二项,第三项数据

	    var arr = [1,2,3,4,5,6,7,8]; 	    arr.splice(1,2); 	    console.log(arr);

修改数据 如我要修改第二项数据

	    var arr = [1,2,3,4,5,6,7,8]; 	    arr.splice(1,1,"hahaha"); 	    console.log(arr);
  • sort()

此方法主要是来对数组进行排序的。sort()括号中使可以写方法,来定义某一个依据去让数据大到小的排列或者是小到大的排序,若不写方法则默认根据字符编码的顺序去排序。下面我们来看看实际使用。

	   var arr2 = [12,2,23,102,5,18,554,32]; 	   arr2.sort(function(a,b) { 	   	    if(a<b) { 	   	    	return -1; 	   	    } else if(a==b) { 	   	    	return 0; 	   	    } else { 	   	    	return 1; 	   	    } 	   });  	   console.log(arr2);

看上述,看判断条件对应的返回值 a<b return -1; a>b return 1;a=b return 0;三个返回值-1 表示位置往前移一位,就是排在前面的意思,0表示位置不变,1表示位置排在后面。所以上面的判断条件对应的就是小的数字拍前面大的数字拍后面。

再来一个demo

        var arr = ["△△△","△△△△△","△△","△△△","△△","△△△△△△△△△△","△△△"];         arr.sort(function(a,b) {         	if(a.length>b.length) {         		return 1;         	} else if(a.length < b.length) {         		return -1;         	} else {         		return 0;         	}         });         console.log(arr);

  • join()

表示将数组转化为字符串,括号就填写拼接时的间隔元素。

  var list =["A","B","C","D","E"]; 	  console.log(list.join("/"));

字符串

和数组一样length属性表示字符串的长度。

循环字符串




常用方法

  • charAt()

获取字符串中指定位置的字符。下标从0开始

  • concat()

连接字符串,返回的是连接后的字符串 "abc".concat("hahaha")

  • indexof()

检查字符串,检索目标字符串是否有指定的字符串。”abc“.indexof("d"),若检索到则返回对应的下边,若无则返回-1。

  • replace()

  • slice()

提取字符串,"人人都爱人民币".slice(1,4); // "人都爱" --->(1,4]

  • substr()

截取字符串。


  • substring()


  • toLowerCase()

将字符串转小写

  • toUpperCase()

将字符串转大写

arguments对象

js里没有函数重载,函数重载就是同一个函数名,不同的参数如java支持函数重载。但是我们可以通过arguments对象来实现函数重载的效果。

arguments是什么呢?它不是数组但又类似数组,它表示的是用户传入的实参。下面看这个demo。

	    // 求任意多个数的和 	    function sum() { 	    	console.log("形参 "+arguments.callee.length); 	    	var sum = 0; 	    	for(var i=0; i<arguments.length; i++) { 	    		sum += arguments[i]; 	    	} 	    	return sum; 	    }  	    console.log(sum(1)); 	    console.log(sum(1,2)); 	    console.log(sum(1,2,3)); 	    console.log(sum(1,2,3,4));

IIFE(即时调用函数表达式)

怎么理解呢?我们定义函数的方式有两种,一种是函数表达式,另一种是函数定义,但是在定义的时候我们并没有去调用该函数。而IIFE就不同,在定义的时候就已经把函数调用了一边,这样做有什么好处呢?下面回来分析,我们先来看看IIFE的使用结构。

   // 标准IIFE 	     (function() { 	    	alert("IIFE"); 	    })();

通过IIFE来解决实际中的问题

我们来实现这样一个问题,给一个数组添加10个函数,函数里有个参数记录着自己这个函数在数组中对应的下标。

<!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <title>Document</title> </head> <body>     <script type="text/javascript">     	var arr = []; 	    for(var i=0; i<10; i++) { 	    	arr.push( function() { 	    		console.log(i); // 想弹出自己的序号 	    	}); 	    } 	    arr[0](); // 10 	    arr[2](); // 10         arr[5](); // 10      </script> </body> </html>
我们可以看到返回的值却不是我们想要的而都是10,为什么呢?不是说每个函数都是闭包,都会保存下当时声明时的值?为什么没有保存下来?为什么只保存了最后一个?

闭包是可以保存当时声明时的参数,但只是个参数没有保存参数对应的值,也就是说数组里面的10个函数都记录下了i,但是i对应的值却不知道,想要保存里面的值的话,该函数需要被调用,那么里面的i就可以被记录下来,这就用到了IIFE,接下来我们把代码修改一下。

<!DOCTYPE html> <html lang="en"> <head> 	<meta charset="UTF-8"> 	<title>Document</title> </head> <body> 	<script type="text/javascript"> 	    var arr = [];          for(var i=0; i<10; i++) {           	(function(n) {           		arr[n] = function() { 	    		   alert(n); // 想弹出自己的序号 	    	    }           	})(i);  	 	    } 	    arr[0](); // 0 	    arr[5](); // 5 	</script> </body> </html>
这样就可以避免刚才的问题,IIFE即时调用函数声明,在声明的时候就已经调用函数,就把里面的i和对应的值保留下来。




js之语法基础数组,字符串等相关知识点已经讲完,接下来会来讲js的dom对象相关的知识点,如有表达错的请谅解,并请提出指出,且修改错误,望能共同进步。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!