数组
数组的定义
new Array(length/content);
字面量var arr = [];
var arr = [1,2,,,,3,4];
var arr = new Array[1,2,3,4];
var arr = new Array(10);
var arr1 = [10];
区别:当给new Array()
只传了一个参数,则其为数组的长度
数组的读和写
arr[num] //不可溢出读,结果是undefined
arr[num] = xxx; //可以溢出写
数组的方法
es3.0最基础最全面最强大
es5.0加了几个新方法,并不是所有浏览器都好使,新老版本不支持
es6.0
JS分为三个部分:ECMAScript DOM BOM
作者创建的js,也是他创建的,但不是完全创建,他只是给出了一些规则
操作html
操作浏览器
每一个浏览器在DOM,BOM上有细微差别
BOM每个浏览器不同
以下都是es3.0的方法
- 改变原数组
push
// arr.push();
// 在数组的最后一位添加数据
// 可同时添加很多个数据
Array.prototype.mypush = function () {
for(var i = 0; i < arguments.length; i ++) {
this.[this.length] = arguments[i];
}
return this.length;
}
pop
// arr.pop();
// 把数组的最后一位剪切出来
// 传参无用
// 返回截取的数据
shift
arr.shift();
// 把数组的首位剪切出来
// 传参无用
// 返回截取的数据
unshift
arr.unshift();
// 在数组的首位添加数据
// 可同时添加很多个数据
splice切片
var arr = [1,1,2,2,3,3];
// arr.splice(从第几位开始,截取多少的长度,在切口处添加新的数据);
// 返回截取的数据
// 添加的数据可以有很多
var arr1 = [1,2,3,5];
arr1.splice(3,0,4);
sort
// 数组有负数位
var arr = [1,2,3,4];
splice = function (pos) {
pos += pos > 0 ? 0 : this.length;
}
-1 + 4 = 3;
// 数组排序(升序
// 按ASCII排序
// 数组的元素为对象也可以排序
arr.sort();
1. 必须写两个形参
2. 看返回值
1)当返回值为负数时,前面的数放在前面
2)当返回值是正数时,后面的数放在前面
3) 当返回值是0时,不动
arr.sort(function (a,b) {
if(a > b) {
return 1;
}
else{
return -1;
}
// 可简写为
return a - b;
return b - a;//降序
});//升序
函数引用,可多次
位置上的数进行比较,选择排序
// 练习:给一个有序数组,使它乱序
var arr = [1,2,3,4,5,6,7];
arr.sort(function ()
{
return Math.random() - 0.5;
})
function retBytes(str) {
var num = str.length;
for(var i = 0; i < str.length; i ++)
{
if(str.charCodeAt(i) > 255)
{
num ++;
}
}
return num;
}
var arr = ['aa','bcvc','dhgfd','adfgcdr'];
arr.sort(function (a,b) {
return retBytes(a) - retBytes(b);
})
reverse
arr.sort().reverse
- 不改变原数组
concat
// 连接数组
// 将后面的数组拼接到前面数组上,形成新数组,不能改变原数组
var arr = [1,2,3];
var arr1 = [4,5];
arr.concat(arr1);
toString
把数组变成字符串展示出来
slice
// slice(从该位开始截取,截取到该位)
// 不写就是整个截取
// 返回截取的数据
join
arr.join(字符串类型的参数)用该参数连接数据,拼成字符串
不传参数按照,连接
split()
// 把字符串按照传入的参数拆分成数组,字符串类型
var arr = [1,2,3,4,5];
var newarr = arr.join('-');
var new1 = newarr.split('-');
// arr
// (5) [1, 2, 3, 4, 5]
// newarr
// "1-2-3-4-5"
// new1
// (5) ["1", "2", "3", "4", "5"]
typeof(newarr) ----> "string"
typeof(arr) ----> "object"
typeof(new1) ----> "object"
join()返回字符串
split()返回数组
类数组
- 可以利用属性名模拟数组的特性
- 可以动态的增长length属性
- 如果强行让类数组调用push方法,则会根据length属性值的位置进行属性的扩充。
var obj = {
'0' : 'a',
'1' : 'b',
'2' : 'c',
'length' : 3,
'push' : Array.prototype.push,
'splice' : Array.prototype.splice
}
// push 的原理
Array.protype.push = function(target) {
obj[obj.length] = target;
obj.length ++;
}
属性要为索引(数字)属性,必须有length属性,最好加上push
是对象,可以当成数组用
好处:
var obj = {
'2' : 'a',
'3' : 'b',
'length' : 2,
'push' : Array.prototype.push
}
obj.push('c');
obj.push('d');
// var obj = {
// '2' : 'c',
// '3' : 'd',
// 'length' : 4,
// 'push' : Array.prototype.push
// }
练习题 P31
复习 P32