As we know JSON.parse parses the stringified JSON, but if a variable is already JSON and you try to do JSON.parse on that it throws an error :
> a
[]
> a = JSON.parse(a)
SyntaxError: Unexpected end of input
at Object.parse (native)
at repl:1:10
at REPLServer.defaultEval (repl.js:132:27)
at bound (domain.js:254:14)
at REPLServer.runBound [as eval] (domain.js:267:12)
at REPLServer.<anonymous> (repl.js:279:12)
at REPLServer.emit (events.js:107:17)
at REPLServer.Interface._onLine (readline.js:214:10)
at REPLServer.Interface._line (readline.js:553:8)
at REPLServer.Interface._ttyWrite (readline.js:830:14)
Why cant JSON.parse verify that argument is already a JSON object and do nothing in that case instead of throwing an error?
[function(){}]will be returned fromJSON.parsejust like that, although it’s invalid JSON. You’d have to make a check for those cases… By the way, edge cases likeJSON.parse({toString: function(){return "[1, 2, 3]";}})may not return the expected result.