JavaScript 类数组

类数组

  • 类数组的特点:
    1.可以利用属性名来模拟数组的特性
    2.可以动态的执行length的属性
    3.如果强行让类数组调用push方法,则会根据length属性值的位置进行属性的扩充
    在函数中实参列表—arguments,就是一个类数组。

  • 类数组的三个组成部分:
    1.属性要为索引(数字)属性
    2.必须有length属性
    3.最好加上push方法
    示例:

var obj = {
    "0" : "a",          //属性为索引(数字)属性
    "1" : "b",
    "2" : "c",
    "length" : 3,       //有length属性(yi'di)
    push :Array.prototype.push,      //加上push方法
}

此时打印结果由{}包裹,仍为一个对象,现在我们加上splice属性将其变成类数组:

var obj = {
    "0" : "a",
    "1" : "b",
    "2" : "c",
    "length" : 3,
    push : Array.prototype.push,
    splice : Array.prototype.splice,
}

此时打印结果由[]包裹,形式上和数组是一样的。

  • 类数组的内部原理:
Array.prototype.push = function(target){
    this[this.length] = target;
    this.length ++;
}

例题:
var执行后的打印结果是什么?

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

解析:

Array.prototype.push = function(target){
    obj[obj.length] = target;
    obj.length ++;
}
//首先length = 2,给"2"位添加"c"
//其次length ++
//length = 3,给"3"位添加"d"
//而length++了两次,从2变成了4

例题:
var执行后的打印结果是什么?

var obj = {
    "1" : "a",          
    "2" : "c",
    "3" : "d",
    "length" : 3,       
    push :Array.prototype.push,      
}
obj.push('b');

结果:
//var obj = {
    "1" : "a",          
    "2" : "c",
    "3" : "b",
    length : 4

解析:

Array.prototype.push = function(target){
    obj[obj.length] = target;
    obj.length ++;
}

练习题:
给你一个数值,请你判断它是什么类型的?
代码:

<script type = "text/javascript"> 
    function type{
        var template = {
            "[object Array]" : "array",
            "[object Object]" : "object",
            "[object Number]" : "number-object",
            "[object Boolean]" : 'boolean-object',
            "[object String]" : 'string-object',
        }
        if(target === null) {
            return "null";
        }
        if(typeof(target) == 'function') {
            return 'function';
        }else if(typeof(target) == 'object') {
            var str = Object.prototype.toString.call(target);   //调用了Object.prototype.toString()的方法,这个方法的本意是转换成字符串,对于一个对象使用时,可以转换成对象对应的类型
            return template[str];
        }else{
            return typeof(target);
        }
    }
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值