我一直在寻找一个解决方案,但我只找到了皈依从["1","2","3"]到[1,2,3],但我的问题是如何将此转换:"[1,2,3]"到[1,2,3].
你们中的许多人可能都很清楚,但对我们来说并非如此.
有几种方法:
eval("[1,2,3]")JSON.parse("[1,2,3]")$.parseJSON("[1,2,3]")Function("return [1,2,3];")()[]["filter"]["constructor"]("return [1,2,3]")()感谢JSF*ck)最安全的选择是使用JSON包,来自jQuery或浏览器的本机包.
记住那eval是邪恶的!它允许执行任意代码.
这同样适用于在Function构造函数,但与那些你可以添加'return'到它.
如果这样做eval("[1,2,3]; evil();"),该evil()函数将执行,同时Function("return [1,2,3]; evil();")将阻止执行evil().
这不是一个完美的解决方案,因为人们仍然可以做Function("return evil() || [1,2,3];"),evil()并将被执行.但是,在这种情况下,[1,2,3]只有当返回evil()回报falsy值("",null,0,false,...).
小智 5
你也可以自己解析:
var s = '[1,2,3]';
var a = s.slice(1, -1).split(',').map(Number);
// .slice(1, -1) -> "1,2,3"
// .split(',') -> ["1", "2", "3"]
// .map(Number) -> [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
变化:
var a = (s.match(/-?\d+/g) || []).map(Number);
// .match(/-?\d+/g) -> ["1", "2", "3"]
Run Code Online (Sandbox Code Playgroud)
// '[]'.match(/-?\d+/g) -> null
// (null || []) -> []
Run Code Online (Sandbox Code Playgroud)
您可以使用eval 以下警告 不要eval不必要地使用!
var myArray = eval("[1,2,3]");
Run Code Online (Sandbox Code Playgroud)