ECMA script - 核心语法4-1

131 阅读4分钟

1.*****Array API

1、*****排序:
     1、鄙视时:不允许使用数组的API - 冒泡排序:拿着数组中的每一个元素,
	       让前一个和后一个做比较,如果前一个>后一个,两者应该交换位置:固定公式
		var arr=[32,14,43,453,6,58,56,531,5,57];
		for(var j=1;j<arr.length;j++){
			for(var i=0;i<arr.length-j;i++){
				if(arr[i]>arr[i+1]){
					var m=arr[i];
					arr[i]=arr[i+1];
					arr[i+1]=m;
				}
			}
		}
		console.log(arr);

     2、数组的API:语法:arr.sort();
	默认:悄悄的转为字符串,按位PK每个字符的unicode号,默认是按照字符串排序
	问题1:希望按照数字升序排序
	解决:
		arr.sort(function(a,b){
			return a-b;
		});
	原理:1、匿名函数回调,一般都是前辈们规定好的,我们只能学习怎么使用,自动调用,而且有多少对儿就会调用多少次
	           2、a:后一个数字    b:前一个数字
	           3、返回结果,如果是正数,说明后一个大
		                 如果是负数,说明前一个大
			如果是0,说明一样大
	            4、而我们的sort方法会根据你返回的正数负数0,来判断要不要交换位置

	问题2:希望按照数字降序排列
		arr.sort(function(a,b){
			return b-a;
		});

	建议:开发中使用API排序,鄙视可能会碰到冒泡排序
	强调:切记前端所有技术中:唯独只有数组可以排序,意味着以后如果网页中有一个排序功能,说明他的底层一定是一个数组

2、栈和队列:
	栈:其实就是一个数组,只不过要求只能从一端进出,另一端是封闭的
	何时:始终希望使用最新的数据时,现实中很少,代码中也很少
	如何:
		前进:arr.unshift(新元素,...)	-      添加元素的新方式,建议不要添加数组
		前出:var first=arr.shift();	-      删除元素的新方式,一次只能删除一个,而且是第一个

		后进:arr.push(新元素,...)	-      添加元素的新方式,建议不要添加数组
		后出:var last=arr.pop();	-      删除元素的新方式,一次只能删除一个,而且是最后一个

	队列:其实就是一个数组,只不过要求一端进,另一端出
	何时:按照先来后到的顺序
	如何:
		前进:arr.unshift(新元素,...)	-      添加元素的新方式,建议不要添加数组
		后出:var last=arr.pop();	-      删除元素的新方式,一次只能删除一个,而且是最后一个

		后进:arr.push(新元素,...)	-      添加元素的新方式,建议不要添加数组
		后出:var last=arr.pop();	-      删除元素的新方式,一次只能删除一个,而且是最后一个

2、二维数组:数组的元素,又引用着另一个数组

 何时使用:在一个数组内,希望再次细分每个分类
 如何使用
 	创建:
var arr=[
	["杨杰",18,1200],
	["周洁",19,1500],
	["盛蕾",20,3500]
];

访问:arr[行下标][列下标];
特殊:列下标越界 - 返回undefined
          行下标越界 - 报错:行下标越界确实会得到undefined,但是undefined没有资格再加[]

遍历二维数组:必然两层循环,外层循环控制行,内层循环控制列
		for(var r=0;r<arr.length;r++){
			for(var c=0;c<arr[r].length;c++){
				console.log(arr[r][c]);
			}
		}

总结:ES3提供的数组,我们学习完毕了:
1、数组的基础(创建、访问、添加、length、遍历)
2、数组的API:10个(转字符串、拼接、截取、翻转、删插替、排序、栈和队列)
3、二维数组

3、*****String的概念:

1、什么是字符串:多个字符组成的【只读】字符【数组】:
	1、只读:我们下周一要学习的所有的字符串的API,都不会修改原字符串,只会返回一个新字符串
	2、数组:和数组有相同点:
		1、可以使用下标得到某个字符
		2、可以使用length获取字符串的长度
		3、遍历字符串
		4、数组不修改原数组的API,字符串也可以使用(拼接 - 垃圾还不如直接+运算,截取)
	      当然和数组也有很多的不同点,数组修改原数组的API,字符串一个都用不到,字符串也有十几个API等待我们学习

2、引用/对象类型:11个
	*String Number Boolean - > 具有包装类型
	*Array *Function Math(数学) Date(日期) *RegExp(正则表达式:验证) 
	Error(错误)
	*Object(面向对象)
	Global - 全局对象:在前端/浏览器端/客户端/js中被window代替了:功能:保存着全局变量和全局函数,只有window可以省略不写

3、***包装类型:专门用于将原始类型的值封装为一个引用类型的对象的(带了属性和方法)
              为什么:原始类型的值原本是不具备任何属性和方法的,但是前辈们发现我们程序员会经常操作到字符串
	           前辈们为了方便我们程序员,为三个原始类型提供了包装类型
           何时使用:只要试图用原始类型的变量去用.调用属性和方法时,就会悄悄的用上包装类型变为对象
           何时释放:方法调用完毕后,自动释放包装类型,并且返回数据(又会变回原始类型)

           为什么undefinednull不能用. - 没有提供包装类型
               

扩展:

周期性定时器:每过一段时间就会自动执行一次
		开启:timer=setInterval(function(){ //不要写var
			操作;
		          },间隔毫秒数)

		停止:clearInterval(timer);
	鼠标移入:onmouseover
	鼠标移出:onmouseout

ECMAscript - 核心语法1 - 掘金 (juejin.cn)
ECMAscript - 核心语法2 - 掘金 (juejin.cn)
ECAM script - 核心语法3 - 掘金 (juejin.cn)
ECAM script - 核心语法4-2 - 掘金 (juejin.cn)
ECMA script - 核心语法5 - 掘金 (juejin.cn)
ECMA script - 核心语法6 - 掘金 (juejin.cn)
ECMA script - 核心语法7-1 - 掘金 (juejin.cn)
ECMA script - 核心语法7-2 - 掘金 (juejin.cn)
ECMAscript 8 - 掘金 (juejin.cn)
ES5&ES6 - 掘金 (juejin.cn)