我想知道为什么console.log在这个我在教程中学习的简单示例中返回反斜杠(我对使用localStorage很陌生(-
localStorage.clear();
let myObj = { name: "Bob", age: 50 };
let myObj_serialized = JSON.stringify(myObj);
localStorage.setItem("myObj", myObj_serialized);
console.log(localStorage);
我看过其他帖子,其中解释了如何删除反斜杠,然而,我想知道为什么会发生这种情况,以及如何避免这种情况。
我关注的教程链接是-https://www.youtube.com/watch?v=AUOzvFzdIk4&t=275s
谢谢。
发生这种情况的原因是字符串化对象使用JSON,正确的JSON具有"
周围的属性和(字符串(值。然而,你保存的东西也是一个字符串。为了使其正确存储,它必须逃离内部"
。
例如,如果您要手动创建相同的字符串化JSON,您也需要这样做,否则您将不断打开和关闭您的字符串定义:
// suggested and invalid.
let stringThing = "{"name":"Bob","age":50}";
// correct
let stringThing2 = "{"name":"Bob","age":50}";
现在很明显,在js中有一些方法可以解决这个问题,只需使用'
来启动字符串,并且您不再需要转义"
,但如果您要注销生成的字符串,您仍然会看到转义双引号。
编辑
evolutionxbox
在对这个答案的评论中提出了一个很好的观点,但它需要一点澄清。CCD_ 6是一个转义字符(在javascript中(。当在字符串中单独使用时,它将永远不会实际显示是否要将该字符串的值打印到DOM的屏幕上。
在保存的数据中显示的在技术上是,在内存中时实际上不在字符串中。它在存储时被放在那里,这样当稍后解析回字符串时,它就不会提前终止字符串(就像我的
stringThing
变量中一样(。
我在字符串中看到的最常见的用法是字符串终止字符。在这种情况下,
"
。创建了转义"
字符,以便和计算机可以确定字符串中是否存在该字符。
注意如果要console.log
您的myObj_serialized
变量,您会看到输出不会显示"
。这支持在内存中时不实际存在于字符串中的点。
这是对转义字符的用途和使用的一种轻微的过度简化,但您可以放心,从存储对象中删除将是一个错误,当您将该值解析回内存时,您甚至不会知道它们在那里。