国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Chrome中JSON.parse的特殊實現

2019-11-20 23:59:13
字體:
來源:轉載
供稿:網友
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中已經修復.
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 寻乌县| 休宁县| 江山市| 治县。| 岑巩县| 三穗县| 平顶山市| 邵阳市| 新巴尔虎左旗| 武清区| 民丰县| 庆云县| 封开县| 孟连| 克东县| 子洲县| 大宁县| 清苑县| 武城县| 金堂县| 靖西县| 郧西县| 公主岭市| 抚顺县| 同仁县| 小金县| 谷城县| 济宁市| 惠州市| 贺州市| 札达县| 卓资县| 邹平县| 澄迈县| 静乐县| 三门峡市| 兰西县| 行唐县| 永福县| 航空| 乐业县|