数组的API
1,排序*****
笔试题:不允许使用数组的API怎么排序;
冒泡排序:拿着数组的每一个元素让前一个和后一个比较,
如果前一个>后一个,那么两者交换位置。
固定公式:for(var j=1;j<arr.length;j++){
for(var i=0;i<arr.length-j;i++){
if(arr[i]>arr[i+1]){
var num=arr[i];
arr[i]=arr[i+1];
arr[i+1]=num;
}
}
}
语法:arr.sort();
默认:悄悄地转为字符串,按位PK每个字符的unicode号,
默认时按照数字升序排列;
问题:希望按照数字大小排列;
解决:arr.sort(function(a,b){
return a-b;
})
原理:1、匿名函数回调,由前人规定好的;
2、a代表后一个数字,b代表前一个数字;
3、返回结果如果是个正数,表示后面一个大;
返回的结果是个负数,则表示前面一个大;
4、而sort方法会根据返回的正负数,来判断要不要交换位置;
5、希望降序排列只需要b-a即可。
强调:一般只有笔试时才会遇到冒泡排序,而所有的前端技术中唯独只有数组可以排序,意味着今后开发过程中只要遇到排序功能那么它的底层一定是个数组。
2,栈和队列
栈:就是一个数组,不过要求是只能一端进出,可以理解为 凵
何时使用:始终希望使用的是最新的数据,很少使用到;
如何使用:前进:arr.unshift(新元素...) - 添加元素到数组的最前面,建议不要添加数组;
前出:arr.shift() - 删除元素,一次只能删除一个,而且是第一个,不修改原数组;
后进:arr.push(新元素...) - 添加元素到数组的最后面,建议不要添加数组;
后出:arr.pop() - 删除元素,一次只能删除一个,删除最后一个,不修改原数组;
队列:同样是一个数组,不过要求是只能一端进,另一端出,| |
何时使用:按照先来后到的顺序使用;
如何使用:前进:arr.unshift(新元素...) - 添加元素到数组的最前面,建议不要添加数组;
后出:arr.pop() - 删除元素,一次只能删除一个,删除最后一个,不修改原数组;
后进:arr.push(新元素...) - 添加元素到数组的最后面,建议不要添加数组;
后出:arr.pop() - 删除元素,一次只能删除一个,删除最后一个,不修改原数组;
二维数组
数组内的元素又引用着另一个数组;
何时使用:在一个数组内,希望再次细分;
如何使用:
创建: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++){
arr[r][c]
}
}
ES3提供的数组10个API就结束了:转字符串,拼接,截取,翻转,删、插、替,排序,栈、队列。
String的概念
什么是字符串:多个字符组成的【只读】字符【数组】;
1、只读:所有的字符串的API都不会修改原字符串,只会返回一个新新字符串;
2、数组:和数组有相同点:
1.可以使用下标获得某个字符;
2.可以使用length获得字符串的长度;
3.遍历字符串;
4.数组不修改原数组的API,字符串也可以使用(拼接,截取)
当然和数组也有很多的而不同点,数组修改原数组的API,字符串一个都用不到,字符串还有十几个API。
应用/对象类型:11个
String Number Boolean -> 具有包装类型
Array Function Math Date Object RegExp Error
Global - 全局对象:在前端中被window代替了,功能:保存着全局函数和变量,可以省略不写。
包装类型:专门用于将原始类型的值封装为一个应用/对象类型(带了属性和方法)
为什么:原始类型的值原本是不具备任何属性和方法的,但是前辈们发现我们会经常操作到字符串,
所以为了方便我们程序员,为三个原始类型提供了包装类型;
何时使用:只要试图用原始类型的变量去用 . 调用属性和方法时,就会悄悄地带上包装属性;
何时释放:方法调用完毕后,自动释放包装类型,并返回数据;
而也是为什么undefined和null不能使用. 因为没有提供包装类型;