JSON.parse与eval的区别
JSON.parse与eval和能将一个字符串解析成一个JSON对象,但还是有挺大区别。 测试代码 var A = "{ a: 1 , b : 'hello' }"; var B = "{ 'a': 1 , 'b' : 'hello' }"; var C = "{'a':1,'b':'hello'}"; var D = '{"a":1,"b":"hello"}'; var E = '{ "a" : 1 , "b" : "hello" }'; var F = '{ "a" : 1 ,\n "b" : "hello" }'; var G = '{ "a" : 1 , "b" : window.location.href="https://www.baidu.com" }'; JSON.parse执行: 例:JSON.parse(A); A、B、C、G都不可转,D、E、F都可以。 eval执行: 例:eval("("+A+")"); A到G都可以转,特别到G时,页面还跳转到百度了。 JSON.parse 上面的演示例子可以看出,这方法只能解析属性名是双引号包裹的字符串对象,并会忽略换行和空格(值外面)。 但是,从 MDN 对JSON的描述,能解析的JSON字符串的条件完整如下: JavaScript类型 JSON与之区别 对象和数组 属性名称必须用双引号包裹; 最后一个属性后面不能有逗号