最终版本如下
function getJson(str) {
try {
let json = JSON.parse(str);
json.a = 1;
console.log("json", json);
return json;
} catch (error) {
console.error(error.message);
return {};
}
}
console.log("aa", getJson(`{"aaa": 1}`));
在没使用try catch之前,是这么写的
function getJson(str) {
if(/^{.+}$/.test(str)) {
return {};
}
let json = JSON.parse(str);
json.a = 1;
console.log("json", json);
return json;
}
console.log("aa", getJson(`{"aaa": 1}`));
用正则来简单判断一下字符串是不是用{}包裹起来的,如果不是,铁定不是json,但是{}包起来的就一定是json么?{a}怎么办?{1,2,3}怎么办?{a:1}怎么办?还有很多种暂时想不到的操作,一个一个列出来么?太麻烦了,还会漏掉一些,只要漏掉了,就会导致程序崩溃,健壮性也太差了。
回过头来我们再来看看try catch,只要报错就会被catch捕获,首先,不用去搞正则了,也不用担心漏掉什么,代码都少了很多,而且可读性也增强了许多。