localStorage JSON Stringify中的反斜杠



我想知道为什么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变量,您会看到输出不会显示"。这支持在内存中时不实际存在于字符串中的点。

这是对转义字符的用途和使用的一种轻微的过度简化,但您可以放心,从存储对象中删除将是一个错误,当您将该值解析回内存时,您甚至不会知道它们在那里。

最新更新