首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Typescript: JSON.parse(localStorage.getItem(‘of’))返回[object Object]而不是预期的object

Typescript是一种静态类型的编程语言,它是JavaScript的超集,可以在编译时进行类型检查。在给定的问答内容中,问题是关于JSON.parse(localStorage.getItem('of'))返回[object Object]而不是预期的object。

首先,让我们解释一下这个问题的原因。在Typescript中,localStorage是浏览器提供的Web API之一,用于在浏览器中存储数据。localStorage的getItem方法返回的是一个字符串,而不是一个对象。当我们使用JSON.parse方法将其解析为对象时,如果字符串无法正确解析为一个有效的JSON对象,那么它将返回一个默认的[object Object]字符串。

为了解决这个问题,我们可以采取以下步骤:

  1. 确保存储在localStorage中的数据是一个有效的JSON字符串。可以使用JSON.stringify方法将对象转换为JSON字符串,并使用localStorage的setItem方法将其存储起来。
  2. 在使用JSON.parse方法之前,先检查localStorage.getItem('of')返回的值是否为null或undefined。如果是,说明localStorage中没有存储该项数据,需要进行相应的处理。
  3. 在使用JSON.parse方法之前,可以使用try-catch语句来捕获可能的解析错误。如果解析失败,可以根据具体情况进行错误处理,例如给出一个默认的对象或者提示用户输入的数据格式有误。

下面是一个示例代码,演示了如何处理这个问题:

代码语言:txt
复制
const data = localStorage.getItem('of');
let parsedData;

if (data) {
  try {
    parsedData = JSON.parse(data);
  } catch (error) {
    console.error('Failed to parse data:', error);
    // 可以根据具体情况进行错误处理,例如给出一个默认的对象
    parsedData = {};
  }
} else {
  // 处理localStorage中没有存储该项数据的情况
  parsedData = {};
}

console.log(parsedData);

在这个示例中,我们首先检查localStorage.getItem('of')返回的值是否存在。如果存在,我们尝试使用JSON.parse方法将其解析为一个对象。如果解析失败,我们将在控制台输出错误信息,并给出一个默认的空对象作为解析结果。如果返回的值为null或undefined,我们也给出一个默认的空对象。

对于Typescript开发者,可以使用类型断言来明确告诉编译器解析结果的类型,例如:

代码语言:txt
复制
const data = localStorage.getItem('of');
let parsedData: object;

if (data) {
  try {
    parsedData = JSON.parse(data) as object;
  } catch (error) {
    console.error('Failed to parse data:', error);
    parsedData = {};
  }
} else {
  parsedData = {};
}

console.log(parsedData);

这样,编译器就知道parsedData的类型是一个对象。

总结一下,当Typescript中的JSON.parse(localStorage.getItem('of'))返回[object Object]而不是预期的object时,可能是由于存储在localStorage中的数据不是一个有效的JSON字符串,或者解析过程中发生了错误。我们可以通过检查数据的有效性、使用try-catch语句捕获解析错误以及给出默认的解析结果来解决这个问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么 useState 返回是 array 不是 object

[count, setCount] = useState(0) 这里可以看到 useState 返回是一个数组,那么为什么是返回数组不是返回对象呢?...为什么是返回数组不是返回对象 要弄懂这个问题要先明白 ES6 解构赋值,来看 2 个简单例子: 数组解构赋值 const foo = [1, 2, 3]; const [one, two, three...,这个问题就很好解释了 如果 useState 返回是数组,那么使用者可以对数组中元素命名,代码看起来也比较干净 如果 useState 返回是对象,在解构对象时候必须要和 useState 内部实现返回对象同名...总结 useState 返回是 array 不是 object 原因就是为了降低使用复杂度,返回数组的话可以直接根据顺序解构,返回对象的话要想使用多次就得定义别名了 首发自:为什么 useState...返回是 array 不是 object

2.2K20

为什么 waitnotifynotifyAll 在 Object 类定义不是 Thread 类?

作者:Yujiaao 来源:segmentfault.com/a/1190000019962661 一个较难回答 Java 问题, Java 编程语言又不是你设计,你如何回答这个问题呢?...为什么在 Object 类中定义 wait 和 notify 方法,每个人都能说出一些理由。...记住同步和等待通知是两个不同领域,不要把它们看成是相同或相关。同步是提供互斥并确保 Java 类线程安全, wait 和 notify 是两个线程之间通信机制。...2) 每个对象都可上锁,这是在 Object不是 Thread 类中声明 wait 和 notify 另一个原因。...3) 在 Java 中,为了进入代码临界区,线程需要锁定并等待锁,他们不知道哪些线程持有锁,只是知道锁被某个线程持有, 并且需要等待以取得锁, 不是去了解哪个线程在同步块内,并请求它们释放锁。

1.4K20

「 Map最佳实践」什么时候适合使用 Map 不是 Object

方法都是通过对比键名是否相等(===)来获取,不相等则返回undefined 比较 Map 和 Object 定义 //Map const map = new Map(); map.set('key',...() { [native code] }1", creates: 1, a: 1, bug: 1} 这个例子灵感来源于《Effective TypeScript》[1]一书 迭代器 「Map」 是可迭代...,对于「Object」而言,想要获得对象属性长度,需要手动对其进行迭代,使其为O(n)复杂度,属性长度为n 在上文提及示例中,我们可以看到「Map」始终保持按插入顺序返回键名。...但「Object」却不是。...Map是一个纯哈希结构,Object不是(它拥有自己内部逻辑)。Map 在频繁增删键值对场景下表现更好,性能更高。

77431

「 Map最佳实践」什么时候适合使用 Map 不是 Object

方法都是通过对比键名是否相等(===)来获取,不相等则返回undefined 比较 Map 和 Object 定义 //Map const map = new Map(); map.set('key',...() { [native code] }1", creates: 1, a: 1, bug: 1} 这个例子灵感来源于《Effective TypeScript》[1]一书 迭代器 「Map」 是可迭代...,对于「Object」而言,想要获得对象属性长度,需要手动对其进行迭代,使其为O(n)复杂度,属性长度为n 在上文提及示例中,我们可以看到「Map」始终保持按插入顺序返回键名。...但「Object」却不是。...Map是一个纯哈希结构,Object不是(它拥有自己内部逻辑)。Map 在频繁增删键值对场景下表现更好,性能更高。

40520

避免在 TypeScript 代码中使用模糊 Object 或 {}

避免 TypeScript 代码中使用模糊 Object 或 {}在 TypeScript 世界里,当我们期望一个对象但不确定对象具体结构时,通常会使用 Object 或 {} 作为类型。...让我们深入探讨一下,看看为什么在 TypeScript 代码中使用这些模糊类型可能是时候慎重考虑了。...理解使用 Object 或 {} 问题当我们有一个 TypeScript 变量存储任何对象,但对对象结构不确定时,我们经常使用 Object 或 {} 这样类型,如下所示:type Param =...,因为我们知道在 JavaScript 中,Object 是一切基础,因此允许像字符串、日期、布尔值等这样值被传递不会抛出 TypeScript 错误,如下所示:myFunc({name: 'John...通过寻找替代方案,我们可以为更加平稳、可预测代码铺平道路。解决方案1:使用 Record我们可以在 TypeScript 中使用 Record 来解决这个问题。

13100

浅析JSON.parse() 和 JSON.stringify()

JSON对象在所有现代浏览器中都可以使用,它有两个非常有用方法来处理JSON格式化内容:解析和字符串化。JSON.parse() 取一个JSON字符串并将其转换为JavaScript对象。...,该字符串以 JSON 格式保存在 localStorage 里 var restoredSession = JSON.parse(localStorage.getItem('session')); /...(unique).map(function(u){ //Object.keys()返回对象所有键值组成数组,map方法是一个遍历方法,返回遍历结果组成数组.将unique对象键名还原成对象数组...return JSON.parse(u); }) return arr; } 存在问题:{x:1,y:2}与{y:2,x:1}通过JSON.stringify字符串化值不同,...(unique).map(function(u) { //Object.keys()返回对象所有键值组成数组,map方法是一个遍历方法,返回遍历结果组成数组.将unique对象键名还原成对象数组

64120

JSON.stringify()妙用

console.log()没有输出我们想要结果。它输出了[object Object],因为从对象到字符串默认转换是“[objectObject]”。...,该字符串以 JSON 格式保存在 localStorage 里 var restoredSession = JSON.parse(localStorage.getItem('session'));...(unique).map(function(u){ //Object.keys()返回对象所有键值组成数组,map方法是一个遍历方法,返回遍历结果组成数组.将unique对象键名还原成对象数组...(unique).map(function(u) { //Object.keys()返回对象所有键值组成数组,map方法是一个遍历方法,返回遍历结果组成数组.将unique对象键名还原成对象数组...(unique).map(function(u) { //Object.keys()返回对象所有键值组成数组,map方法是一个遍历方法,返回遍历结果组成数组.将unique对象键名还原成对象数组

75410

模式声明和验证库 Zod 介绍

Zod 是一个以 TypeScript 为首模式声明和验证库 最近项目中,涉及到大量接口调用,前端代码默认接口返回数据是满足类型声明,并没有进行校验。...(src_json_str) as User console.log(data_json); 这段代码有个问题,如果接口返回"age"不是数字,而是字符串,那么就可能会产生一个隐藏bug,这个时候...import { z } from "zod"; const User = z.object({ name: z.string(), age: z.number(), }); // 假设这里...age 数据类型为 string,不是 number const src_json_str = '{"name":"hello" , "age":"28"}'; //这里没有验证数据是否满足要求...[image-20220426215733791.png] 当然除了数据类型判断,Zod库还能做一些简单逻辑判断: const User = z.object({ name: z.string(

1.8K00

LocalStorage与SessionStorage

localStorage与sessionStorage localStorage和sessionStorage是HTML5提供对于Web存储解决方案 相同点 都与HTTP无关,是HTML5提供标准...String类型 对于每个域容量是有限,不同浏览器不一样,大部分存储为5M左右 不同点 localStorage用于持久化本地存储,除非主动删除数据,否则数据是永远不会过期。...localStorage.setItem('key', 'value'); sessionStorage.setItem('key', 'value'); /** * 由于存储数据会调用 toString() 方法 * Object...类型会存储为 [object Object] 字符串 * 所以进行存储时需调用 JSON.stringify() 转化为字符串 * 取出时调用 JSON.parse() 将字符串转回对象 */...读取数据 localStorage.getItem('key'); sessionStorage.getItem('key'); 删除数据 localStorage.removeItem('key');

59360

JSON.parse”遇上”非键值对

那么作为常识,我们知道JSON提供了两个常用工具方法可以实现互相转换,分别是JSON.parse(),以及JSON.stringfy();常识另外一方面,我们也知道一般情况下,我们处理后端返回对象都是标准键值对格式...产生这个想法是因为在处理业务时候发现,后端有个字段,其图片列表字段值,返回是‘[url1,url2]’,很显然其是数组字符串后结果。...我进行了一些案例验证,这里直接将结果公布出来,大家有兴趣可以去校验下是不是这样结果。...首先我们要有个基本概念理解下:String在解析之前进行了一次字符串格式整理,来保证整体字符是有效,然后根据第一个字符进行了分类,不符合预期情况都会报未期待字符错误。...如果不是,那么就会按照ParseJsonValue进行转换,当发现转换为对象失败,比如说发现是null,或者一些特殊情况时候,就会报错不可预期字符串错误; 如果右侧是],则可能是数组,按照简单数组以及复杂数组分别处理

2.3K30
领券