论坛首页 Web前端技术论坛

[Json.js] 处理Map出现的怪问题

浏览 6731 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-10-25  
我从服务器传回如下json片断:
{"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?


  • 大小: 33.2 KB
   发表时间: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里的东西要遍历,这样就不行了
0 请登录后投票
   发表时间:2007-10-26  
或者得等到json成为javascript的一部分后才能修正了?

我选方案二,province只是一个key:value,这样可以保留对json.js更新。
1 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics