Array,Object中那些容易走入的误区

在javascript操作Array和Object对象的时候有一些误区是很容易走入的,尤其是那些指针问题,虽然说javascript中并没有像C语言那样的指针操作,但是这并不代表了javascript中就根本没有用到指针,其实在javascript中是有指针的,只是内部被封装好了,不用程序员自己再去手动敲写罢了。


容易犯的错误1:

以下面的例子为例来说明,下面的例子是用javascript中的Array与Object对象来模仿Java中的list与map容器。

    var map=new Object();
    var list=new Array();

    map.id=0;
    map.text='node1';
    list.push(map);
    
    map.id=1;
    map.text='node2';
    list.push(map);

    map.id=2;
    map.text='node3';
    list.push(map);

上面的代码从思想上看,应该是想将node1,node2,node3包括各自的id分别放入对应的map中,然后再放入list中,但是实际上得到的结果却是:


很遗憾的是,得到的结果都是最后一个map中的节点信息,why?究其原因那就是它们放入list中的并不是map对象,而是对map对象的引用,换言之,我们放入的是对于map对象引用的指针,所以说每次的map修改操作,最后都会影响到list中所有的map值,最后结果就变成了上面的情况。


容易犯的错误2:

    var map=new Object();
    var list=new Array();

    map.id=0;
    map.text='node1';
    var map1=new Object();
    map1=map;
    list.push(map1);

    map.id=1;
    map.text='node2';
    var map2=new Object();
    map2=map;
    list.push(map2);

    map.id=2;
    map.text='node3';
    var map3=new Object();
    map3=map;
    list.push(map3);


上面的代码看上去都重新new了一个对象,按说来应该分别会将该对象放入list中才对,其实并不是这样的,这是下面得到的结果:


在上面的代码中,我们确实是new了一个对象,但是该对象放入的是map的指针,然后我们再将该对象放入list中,由于map中的修改,造成的我们new出来的对象的值发生了变化,进而导致list中放入的还是最后一个map中的内容。


真正的解法是:


我们应该在创建对象之后进行赋值,每创建一次对象,赋一次值,如下:

    var list=new Array();

    var map1=new Object();
    map1.id=0;
    map1.text='node1';
    list.push(map1);

    var map2=new Object();
    map2.id=1;
    map2.text='node2';
    list.push(map2);

    var map3=new Object();
    map3.id=2;
    map3.text='node3';
    list.push(map3);

此时得到的结果如下:







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值