当将JSON.stringify值设置为等于变量时,它会添加' \'在前面和\#39;到最后

时间:2016-01-26 21:26:00

标签: javascript json stringify

我确信我错过了一些基本的东西,但我不确定是什么。

以下是一些代码:

  var carColor = JSON.stringify(this.car.color);

  document.getElementById('id').innerHTML = carColor; // displays: "blue"
  console.log(carColor); // displays: '\'blue\''

我假设我可以使用一个函数来删除该文本中的斜杠,但有没有更好的方法让该变量等于颜色名称?

2 个答案:

答案 0 :(得分:2)

JSON.stringify()的行为是标准化的,不会添加您正在观察的斜杠。

但是,console.log()的准确行为并非跨平台标准化,并且可能会有所不同。拟议的规范正在开发中,但仍处于早期阶段(我仍不清楚它是否会涵盖这一细节)。你不能依赖它的输出是完全一致的。

在某些平台上,字符串可能会在显示之前自动重新转义,以便读者可以清楚地知道任何特殊字符(假设谁是开发人员,而不是最终用户会感到困惑)。当字符串已经使用JSON.stringify()进行转义时,这种双重转义会导致输出中显示反斜杠,正如您所经历的那样。

您可以使用另一种显示文本的方法,例如alert()来验证字符串的实际内容。

答案 1 :(得分:2)

'\'是允许在字符串中使用保留字符的分隔符。

可在此处找到完整列表:http://www.w3schools.com/js/js_strings.asp

基本上,如果我有这样的字符串: 'He said 'hi!'',javascript会将其解释为字符串'he said ',然后尝试执行代码hi!并遇到问题。要告诉javascript你想在字符串中放一个引号,你需要写\'所以这个字符串现在变成'He said \'hi!\''

在您的情况下,您为color变量分配了字符串'blue'。 JSON旨在运送对象,因此通常您有一个JSON字符串'color: \'blue\''。由于只有值是JSONified,因此它变为字符串'blue',其中包含“'并将写入'\'blue\''。希望有所帮助!