浏览 6731 次
锁定老帖子 主题:[Json.js] 处理Map出现的怪问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-10-25
{"provinces":{"11":"北京市 ","12":"天津市","13":"河北省 ","14":"山西省","15":"内蒙古自治区","21":"辽宁省","22":"吉林省","23":"黑龙江省 ","31":"上海市","32":"江苏省 ","33":"浙江省 ","34":"安徽省 ","35":"福建省 ","36":"江西省","37":"山东省","41":"河南省","42":"湖北省 ","43":"湖南省","44":"广东省","45":"广西壮族自治区","46":"海南省","50":"重庆市","51":"四川省","52":"贵州省","53":"云南省","54":"西藏自治区","61":"陕西省","62":"甘肃省","63":"青海省","64":"宁夏回族自治区","65":"新疆维吾尔自治区","71":"台湾省","81":"香港特别行政区","82":"澳门特别行政区","99":"海外"}} 即省份编码和省份名称的对应,省份编码是非连续的。 我利用json.js想取出key和value: var regions=request.responseText.parseJSON(); for(var k in regions.provinces) { alert(regions.provinces[k.toString()]); } 但奇怪的是第一次循环取的k的值是"toJSONString",而打印出来的是Json.js里的代码片断,如图,之后就是正确的省份名称了。 请问要如何才能遍历整个map? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-10-25
原因就是json.js定义了 Object.prototype.toJSONString
于是 regions.province也就有了这个东西,于是 for (var k in )时,会有一个toJSONString的k var k in ...这个语法会把所有自己定义的东西都遍历出来,包括prototype里的,只有javascript自己定义的东西不会遍历出来 比较好的解决办法就是修改json.js 改成Object.toJSONString,不要prototype abc.toJSONString改成 Object.toJSONString(abc) 不要给Object.prototype加任何东西,这是一个好习惯 另一个简单办法就是: for (var k in regions.provinces) if (regions.provinces.hasOwnProperty(k)) alert(...) 判断hasOwnProperty就将prototype中的都排除掉了 但是如果regions.provinces是某个自定义类的对象,希望自定义的prototype里的东西要遍历,这样就不行了 |
|
返回顶楼 | |
发表时间:2007-10-26
或者得等到json成为javascript的一部分后才能修正了?
我选方案二,province只是一个key:value,这样可以保留对json.js更新。 |
|
返回顶楼 | |