js对象做map用时遇到的棘手问题,高手看看

最近项目里用js的map结构特别频繁,所以自己写了一个,结构如下(大概描述一下,详细的就不贴了)

[code="java"]function Map{
this.data = {};
}

Map.prototype.put = function(key,value){
this.data[key] = value;
}

Map.prototype.get = function(key){
return this.data[key] ;
}[/code]

原来使用数组实现的this.data = [];
可是使用了ext框架,数组里扩充的方法比较多,for in遍历有点麻烦,就改成这样了。

但是现在出现了比较麻烦的问题

[code="java"]var m = new Map();
m.put("123fff","fishyu2010");[/code]

根本put不进去,我猜想可能是对象不支持以数字开头的属性

本来想在key的前面加个字符,可是
我在项目中已经大量使用了for(var p in m.data){}这样了遍历,这样就会有问题了。

请问高手们有没有好的解决办法。

我测试你写的map,是可以正常put进去的

对象是完全支持以数字开头的属性,只不过引用方式就要改变一下

var obj ={};

obj['111aaa'] = 'aaaa';

这样是完全没问题的,只是不能用obj.111aaa来取属性了

确实是对像不支持数字开头,感觉也没有什么好的方法,我自己是在前面加"_",当读取后把"_"去掉,看看下面的人有没有好的解决办法了

你写错了
应该是这样

function [color=red]Map()[/color] {

this.data = {};

}

对象也是支持以数字开头的属性

function Map{

this.data = {};

}

改成
function Map(){

this.data = {};

}

[code = "js"]
aa.1234='sdf';
SyntaxError: Unexpected number
[/code]
对像是不能以数字开头的

[code = "js"]
aa.1234='sdf';
SyntaxError: Unexpected number
[/code]

对像是不能以数字开头的