JS-数组、类数组

数组

数组的定义

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的方法

  1. 改变原数组

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
  1. 不改变原数组

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()返回数组

类数组

  1. 可以利用属性名模拟数组的特性
  2. 可以动态的增长length属性
  3. 如果强行让类数组调用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值