JavaScript字符串转对象:JSON.parse、eval与new Function详解
本文总结JavaScript中将字符串转换为对象格式的三种常用方法:JSON.parse、eval和new Function。重点解析JSON.parse对标准JSON格式的严格要求,以及非标准格式下使用eval和new Function的替代方案与注意事项。
背景:
在JavaScript开发中,将字符串转换为对象格式时,开发者通常会首选JSON.parse()方法。然而,当待处理的字符串不符合标准JSON规范时,该方法会抛出解析错误。此时,可以考虑使用eval()函数或new Function()构造函数作为替代方案来完成转换。
以下是三种常用的将字符串(string)转换为JSON对象的方法:
var str = '{"name":"小明","age":18}';
var json = JSON.parse(str);//第一种
var json2 = eval("(" + str + ")");//第二种
var json3 = (new Function("return " + str))();//第三种打印效果:

详细说明:
JSON.parse()
语法:
JSON.parse(text[, reviver]);
//text:必需, 一个有效的 JSON 字符串。
//reviver: 可选,一个转换结果的函数, 将为对象的每个成员调用此函数。使用JSON.parse()前,必须确保源数据符合标准的JSON格式,否则将导致解析失败。
情况一:部分开发者习惯使用对象形式的字符串,例如:str = '{name:"小明",age:18}'。若对此类字符串使用JSON.parse()进行转换,会因违反JSON规范而报错。
情况二:若使用单引号包裹双引号,如:var str = "{'name':'小明', 'age':18}"(部分开发者习惯用双引号包裹单引号),使用JSON.parse()转换同样会报错。

eval() 函数
定义和用法:
eval()函数用于计算JavaScript字符串,并将其作为脚本代码执行。
若参数为表达式,eval()将执行该表达式;若参数为JavaScript语句,eval()将执行相应的JavaScript语句。
语法:
eval(string)参数描述string必需。要计算的字符串,其中包含待计算的JavaScript表达式或需执行的语句。
eval()的返回值
eval()的返回值遵循以下规则:
1. 若eval()的参数非字符串,则直接返回该参数。
2. 若eval()的参数为字符串,则将该字符串解析为代码后执行,并返回最后一行代码的执行结果。
3. 若字符串无法解析为合法代码,eval()将抛出SyntaxError错误。
new Function()
这种特殊的new Function用法看似奇特,但在实际应用中非常有用。
语法:
let func = new Function(arg1, arg2, ..., body);出于历史原因,参数也可以以逗号分隔的列表形式提供。
以下三种写法含义相同:
new Function('a', 'b', 'return a + b'); // 基础语法
new Function('a,b', 'return a + b'); // 逗号分隔
new Function('a , b', 'return a + b'); // 逗号加空格分隔使用new Function创建的函数,其[[Environment]]引用全局词法环境,而非包含该函数的外部词法环境。因此,它们无法访问外层变量。这虽然避免了潜在的错误,但也意味着必须显式传递参数。从架构角度看,显式传递参数是更优的方法,且在使用代码压缩工具(minifiers)时不会引发问题。
总结
至此,关于JavaScript字符串转换为对象格式的三种方法总结完毕。如需了解更多相关JS字符串转换对象格式的内容,请搜索本站历史文章或继续浏览后续相关文章。感谢大家的支持!
JavaScript怎么准确判断数据类型:typeof、instanceof与Object.prototype.toString
2026-11-05 17:09:21
JS中将数组和对象混合组装为JSON字符串
2026-11-05 16:41:42
JS运算符优先级与结合性的区别是什么?
2026-11-05 13:22:02
JS Map怎么只遍历Key或Value
2026-11-05 13:00:36
D3.js 与 ECharts 选型对比:灵活性 vs 开发效率
2026-11-05 09:45:01
相关标签:
