其中的掛在 String 類別的 parseJSON
函式,可檢查字串是否為 JSON
格式,若是的話則解析它,將其中的資料解涷,成為變數。
但是這個函式在碰到很長的字串的時候,會讓 Safari
Crash。於是只好做些限制:
String.prototype.parseJSON = function () {
try {
if ( this.length > 5 * 1024 ) {
return eval('(' + this + ')');
}
return (/^("(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u
\n\r\t])+?$/.test(this)) &&
eval('(' + this + ')');
} catch (e) {
return false;
}
};
也就是,在長度大於 5K 時,完全不檢查,直接
eval。雖然有些風險,不過有時為了讓 Safari 不
Crash,也只好照做了。
Cheers,
Kang-min Liu