我正在尝试创建一个解析JSON文本的函数。
function JSONParser(string) {
//CODE HERE
string = string.replace(/"/g, "");
var obj = {};
obj[0] = string;
string = obj[0].replace(/'/g, "");
return string;
}

我只对对象做了那个时髦的事情因为.replace似乎没有第二次直接在字符串上工作。
当我通过检查程序运行此代码时。我明白了......
JSONParser(JSON.stringify(true));
"true"

我的目标是返回布尔值true而不是字符串。
有谁知道为什么我仍然得到双引号的回报?更改字符串对象比删除引号更多吗?或者,我只是试图错误地删除它们?
非常感谢任何帮助。 TIA
-Lea
答案 0 :(得分:2)
因为它仍然是一个字符串,所以控制台用引号(作为装饰)显示它。
请记住,当您执行var foo = "true"
时,引号实际上不是字符串的一部分,因此无需删除它们。您的控制台只是将它们显示为指示其显示的数据类型的方式。他们实际上并不存在。
如果你想要一个布尔值,你可以这样做:
function JSONParser(string) {
return string === "true" ? true :
string === "false" ? false : string;
}
console.log(JSONParser(JSON.stringify(true)));
如果字符串既不是"true"
也不是"false"
,它只返回原始字符串。
如果您更喜欢if
语句,那么:
function JSONParser(string) {
if (string === "true") {
return true;
} else if (string === "false") {
return false;
} else {
return string;
}
}
console.log(JSONParser(JSON.stringify(true)));
或者switch
声明也很有用。