JavaScript字符串转对象:JSON.parse、eval与new Function详解

作者:木棉

时间:2026-10-26

浏览:282

本文总结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字符串转换对象格式的内容,请搜索本站历史文章或继续浏览后续相关文章。感谢大家的支持!

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章