最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Chrome中JSON.parse的特殊实现_json

来源:懂视网 责编:小采 时间:2020-11-27 20:56:47
文档

Chrome中JSON.parse的特殊实现_json

Chrome中JSON.parse的特殊实现_json:IE8/Firefox3.5+/Chrome4/Safari4/Opera10 已实现该方法。使用方式很简单: 代码如下: var str = '{name:jack}'; var json = JSON.parse(str); alert(json.name); 在以上实现该方法的浏览器中都会弹出jack。 如果给Obj
推荐度:
导读Chrome中JSON.parse的特殊实现_json:IE8/Firefox3.5+/Chrome4/Safari4/Opera10 已实现该方法。使用方式很简单: 代码如下: var str = '{name:jack}'; var json = JSON.parse(str); alert(json.name); 在以上实现该方法的浏览器中都会弹出jack。 如果给Obj

IE8/Firefox3.5+/Chrome4/Safari4/Opera10 已实现该方法。使用方式很简单:
代码如下:
var str = '{"name":"jack"}';
var json = JSON.parse(str);
alert(json.name);

在以上实现该方法的浏览器中都会弹出“jack”。
如果给Object.prototype添加一个解析json的方法(某人可能会强烈反对这么干污染了原生对象,这里纯粹为了讨论)
代码如下:
Object.prototype.parseJSON = function () {
return JSON.parse(this);
}

因为所有的对象都继承了Object的方法,这时候可以直接这么用了,
代码如下:
var str = '{"name":"jack"}';
var json = str.parseJSON();
alert(json.name);

str.parseJSON()时,parseJSON内部的this就指向了str。这时候并非所有浏览器都能解析成功。

IE8/Firefox/Safari/Opera仍然会弹出“jack”,Chrome中则报错了:Uncaught illegal access。
为什么这样写Chrome就不支持呢?比较两种方式,传给JSON.parse的参数一个是字符串str,一个是this。貌似这两个没区别?
当str.parseJSON()时,parseJSON内部的this指向了应该就是str。修改下parseJSON方法:
代码如下:
Object.prototype.parseJSON = function () {
alert(typeof this);
return JSON.parse(this);
};

重新执行,可以发现parseJSON弹出的是object,可能这就是区别了。直接new一个字符串就能看到明显的效果了
代码如下:
var js = JSON.parse(new String('{"name":"jack"}'));
alert(js.name);

以上代码除Chrome报错外,其它浏览器均执行正常。
基本得出结论:
Chrome中,JSON.parse的第一个参数只能是字符串,不能是对象(包括new String方式也不支持)
再回到上面给Object.prototype添加一个解析json的方法,如果要兼容所有浏览器,可以这么写:
代码如下:
Object.prototype.parseJSON = function () {
return JSON.parse(this.toString());
}
var str = '{"name":"jack"}';
var json = str.parseJSON();
alert(json.name);

2010-10-09 : 该BUG在Chrome6中已经修复.

文档

Chrome中JSON.parse的特殊实现_json

Chrome中JSON.parse的特殊实现_json:IE8/Firefox3.5+/Chrome4/Safari4/Opera10 已实现该方法。使用方式很简单: 代码如下: var str = '{name:jack}'; var json = JSON.parse(str); alert(json.name); 在以上实现该方法的浏览器中都会弹出jack。 如果给Obj
推荐度:
标签: chrome chr json
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top