function StrToJSON(str){ if(Lib._.isString(str)){ return (new Function('return '+str))(); }else{ return false; } }
最近发现这样子也可以把字符串转成json,ie6也没问题,效率也很高
可为啥没人这样写?是有什么坑的吗?
走同样的路,发现不同的人生
有差别, 主要体现在: JSON的格式定义是一个纯“数据”的存储格式,不支持javascript所有的语言格式,包括:函数、表达式等。 因此JSON字符串转换到 Javascript Object 之后的对象,是不能包含函数之类的特性。
所以,采用 new Function(...)这种转化格式,或者更直接一点:eval("var data ="+str); 的话,转换是没问题的, 不过会出现如果原来的字符串有人估计埋入的函数的话, 就会被执行了。 进一步造成安全问题(如xss)。
综上所述:如果题主的数据源的安全性是可控的话, 问题不大。 如果是用户输入的内容, 这里就要小心了。
有原生的实现,当然先用原生的了, JSON.parse 是JS引擎提供的函数, 源码是C语言写的, 速度也会更快一些
有差别, 主要体现在:
JSON的格式定义是一个纯“数据”的存储格式,不支持javascript所有的语言格式,包括:函数、表达式等。
因此JSON字符串转换到 Javascript Object 之后的对象,是不能包含函数之类的特性。
所以,采用 new Function(...)这种转化格式,或者更直接一点:eval("var data ="+str); 的话,转换是没问题的, 不过会出现如果原来的字符串有人估计埋入的函数的话, 就会被执行了。 进一步造成安全问题(如xss)。
综上所述:如果题主的数据源的安全性是可控的话, 问题不大。 如果是用户输入的内容, 这里就要小心了。
有原生的实现,当然先用原生的了, JSON.parse 是JS引擎提供的函数, 源码是C语言写的, 速度也会更快一些