JSON.parse 如何管理“未定义”?

2024-01-05

我改变了这个:

function MangaElt(obj) {
  "use strict";
  this.mirror = obj.mirror;
  this.name = obj.name;
  this.url = obj.url;
  if (obj.lastChapterReadURL !== undefined) {
    this.lastChapterReadURL = obj.lastChapterReadURL;
    this.lastChapterReadName = obj.lastChapterReadName;
  } else {
    this.lastChapterReadURL = null;
    this.lastChapterReadName = null;
  }
  this.listChaps = [];
  if (obj.listChaps !== undefined && obj.listChaps !== null && obj.listChaps !== "null") {
    if (!isArray(obj.listChaps)) {
      this.listChaps = JSON.parse(obj.listChaps);
    }
  }
  this.read = 0;
  if (obj.read !== undefined && obj.read !== null && obj.read !== "null") {
    this.read = obj.read;
  }
}

进入这个:

function MangaElt(obj) {
  "use strict";
  this.mirror = obj.mirror;
  this.name = obj.name;
  this.url = obj.url;
  this.lastChapterReadURL = obj.lastChapterReadURL || null;
  this.lastChapterReadName = obj.lastChapterReadName || null;
  this.listChaps = JSON.parse(obj.listChaps) || [];
  this.read = obj.read || 0;
  this.update = obj.update || 1;
}

正如您所看到的,代码现在更具可读性和紧凑性。该片段在正常情况下工作得很好。问题是我有时没有所有的价值观obj对象,所以,我期望一些undefined到处都是。这就是我提出问题的原因:

  1. Why JSON.parse解释一个undefined作为字符串,拖曳如说MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse,“语法错误”undefined?
  2. 那么,我应该在解析值之前检查该值是否是正确的字符串?
  3. 不应该 JSON.parse,每当解析的值是时检查undefined然后返回undefined? (这可能会引起争论,所以,如果你认为这很好,请忽略这个问题或声明我只是错了我的低谷序列)
  4. 如果#2 是肯定的,那么只需添加一些条件作为第一个片段就足够了,对吧?或者我应该转到调用 MangaElt 的函数并确保obj.listChaps是一个数组,忘记吧JSON.parse这里?。 (这始终是一个数组 http://pastebin.com/niQ6qG0P或字符串中的伪数组,由于这是一个协作项目,因此有人可能有这样做的原因)

对于好奇的人可能会问,“您遇到的错误是什么?”这是:

Error in event handler for 'undefined': Unexpected token u SyntaxError: Unexpected token u
at Object.parse (native)
at new MangaElt (chrome-extension://nhjloagockgobfpopemejpgjjechcpfd/js/MangaElt.js:44:25)
at readManga (chrome-extension://nhjloagockgobfpopemejpgjjechcpfd/js/background.js:410:24)
at chrome-extension://nhjloagockgobfpopemejpgjjechcpfd/js/background.js:607:9
at Event.dispatchToListener (event_bindings:356:21)
at Event.dispatch_ (event_bindings:342:27)
at Event.dispatch (event_bindings:362:17)
at miscellaneous_bindings:165:24
at Event.dispatchToListener (event_bindings:356:21)
at Event.dispatch_ (event_bindings:342:27) event_bindings:346

这就是现有条目的样子 https://i.stack.imgur.com/p52OB.png,这不会产生错误。这个场景 https://i.stack.imgur.com/pahVw.png这就是我提出问题的动机。密钥的类型始终相同并事先经过测试:

  • name是一个字符串
  • mirror是一个字符串
  • url是一个字符串
  • listChaps是字符串内的“数组”
  • ts and upts是整数

BTW, obj是一个物体,但我认为它几乎不可能被错过。另外,这是一个 Chrome 扩展,但我认为这不相关。完整脚本here https://github.com/AllMangasReader-dev/AMR/blob/develop/js/MangaElt.js.


undefined不是有效的 JSON 令牌。将未定义的值转换为 JSON 时,正确的做法是将其渲染为 null。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JSON.parse 如何管理“未定义”? 的相关文章

  • Jquery 悬停卡

    我在用着http designwithpc com Plugins Hovercard http designwithpc com Plugins Hovercard 但我不知道如何在悬停卡上声明 var 每个工作描述都有自己的 ID 当悬
  • 浏览器视口大小(以设备像素为单位)

    Goal 我希望 Flash 能够获得有关浏览器视口宽度和高度 以设备像素为单位 的准确信息初始化 调整大小或浏览器缩放事件时 规格 我需要将 flash 嵌入到在 chrome safari firefox 等中运行的 html 页面中
  • 位置特征检测:固定

    我正在尝试找到一个脚本来检测设备是否放置position fixed元素相对于视口而不是整个文档 目前 标准桌面浏览器和 Mobile Safari 适用于 iOS 5 都是这样做的 而 Android 设备则相对于整个文档放置固定元素 我
  • jQuery .push 到 .get 调用中的数组给出空结果

    谁能告诉我为什么下面给我一个空字符串 当我console log contentArray in the get 回调函数它显示数据 但是当我尝试在下面的代码中执行它时 结果为空 sectionArray contentArray func
  • 如何使用 Playwright 使用选择器查找框架 (iframe)

    我有一个小问题 无法找到使用 Microsoft Playwright 框架的答案 根据您可以使用以下代码获取 iframe const frame page frame frame login 但是如何使用选择器来查找 iframe 并与
  • 想要动态处理与分页相关的页码显示:ReactJS

    我有一些分页逻辑工作得很好 唯一的问题是我只能让它显示并固定数量的页面可供选择 现在我已经把它放到了 5 页 但我希望它能够根据总记录动态更改 假设我有 100 条记录 每页限制为 10 条 将有 10 页 现在我只能让它以这种方式显示 第
  • 如何使用javascript确保元素仅在圆上朝一个方向移动?

    好吧 我承认我对三角学真的很糟糕 出于上下文的考虑 我将添加我在这里提到的问题中的内容 参考问题 https stackoverflow com a 39429290 168492 https stackoverflow com a 394
  • 按下回车键时不刷新页面

    我遇到了一些问题 只要表单中有输入 回车键就会触发页面刷新 下面的代码 如果按下回车并且文本区域 input 中没有输入任何文本 则不会刷新页面 但是如果按下回车并且 input中有输入或者光标位于文本区域 我不确定是什么触发了它 因为 s
  • ReactTransitionGroup 不适用于 React-redux 连接组件

    我正在开发一个更大的项目 但我创建了这个简短的示例来说明问题 如果我使用Box组件 它的工作原理 它在控制台中输出componentWillEnter and componentWillLeave当我们点击按钮时 如果我使用BoxConta
  • 如何通过单击链接来更改 div 的内容?

    这是我的网页的 修改后的 jsfiddle 它还有很多 而且定位是正确的 与此相反 http jsfiddle net ry0tec3p 1 http jsfiddle net ry0tec3p 1 a href class btn1 st
  • JavaScript 中的 Promise 有什么意义?

    一个承诺是一个 可能现在可用 或将来可用 或永远不可用的值 来源 MDN 假设我有一个想要处理图片的应用程序 图片已加载 例如在算法在后台使用它之后 或某种其他类型的延迟 现在我想检查一下图片是否可以在future 通过使用承诺 而不是回调
  • 如何使用 Javascript 设置查询字符串

    有没有办法使用 javascript 设置查询字符串的值 我的页面有一个过滤器列表 单击该列表时 它将更改右侧的页内结果窗格 我正在尝试更新 url 的查询字符串值 因此如果用户离开页面 然后单击 后退 按钮 他们将返回到最后一个过滤器选择
  • onclick 事件中未调用函数

    我想在每个 YouTube 链接的末尾添加一些 HTML 以在 litebox 中打开播放器 到目前为止 这是我的代码 document ready function var valid url new RegExp youtube com
  • 如何在另一个自定义 Hook 中使用返回值的自定义 Hook?

    我正在使用 React native 其中有一个名为的自定义 HookuseUser使用以下方法从 AWS Amplify 获取用户信息Auth getUserInfro方法 然后获取返回对象的一部分并用它设置一个状态变量 我还有另一个名为
  • 改变 JavaScript 中的顶部填充

    以下是我在 css 中设置顶部填充的方法 body font size font size px margin 0 padding 100px 0 20px 0 width 100 important 如何使用最简单的 javascript
  • 使用 Google 日历源时如何禁用 FullCalendar 中的活动链接?

    我正在使用 FullCalendar 库从 Google 日历加载日历中的事件 不幸的是 事件添加到日历后 它们是可点击的 当您点击该活动时 您会自动重定向到 Google 日历页面以查看该特定活动 或者如果您有足够的访问权限 则可以直接对
  • 主页(网格)上的缩略图现在显得模糊。如何纠正?

    我不知道这看起来是否愚蠢 但从早上开始我就无法纠正这个突然出现在我的博客网站上的错误www candidopinions in http www candidopinions in 我有一个网格视图模板 其中博客文章中的特色图像作为调整大小
  • 有没有办法使用 ko.observableArray 作为地图?

    有没有办法使用ko observableArray http knockoutjs com documentation observableArrays html像地图 字典一样 例如 var arr ko observableArray
  • 滚动顶部不符合预期

    Note 由于上次忘记奖励而重新开放赏金 A Woff 大师已经给出答案 我想在用户展开某一行时到达该行 这样当最后一个可见行展开时 用户不必向下滚动即可查看内容 I used example tbody on click td green
  • 如何从 json 文件创建模型? (ExtJS)

    这是我想使用 json 文件创建的模型 Ext define Users extend Ext data Model fields name user id type int name user name type string 为了根据服

随机推荐

  • 如何在没有 row.names / 行号的情况下打印 tibble

    Tibbles 打印时使用行号作为行名称 看1 2在下面的左边距中 tibble as tibble mtcars A tibble 32 x 11 mpg cyl disp hp drat wt qsec vs am gear carb
  • 在 Java 中编译循环

    正如我所看到的JVM规范 http docs oracle com javase specs jvms se7 html jvms 3 html jvms 3 2这段代码 void spin int i for i 0 i lt 100 i
  • 创建列并在同一事务中插入到其中?

    是否可以在同一事务期间创建列并向其中插入值 这是升级脚本的一部分 我找到了以下方法online http www mssqltips com sqlservertip 1467 populate a sql server column wi
  • 使用 R 中的plotly包再现等值区域图

    library plotly df lt read csv https raw githubusercontent com plotly datasets master 2011 us ag exports csv df hover lt
  • 如何使用 VB.NET 在 ASP.NET MVC 中添加 id HTML 属性

    我正在尝试使用 ASP NET MVC 和 VB NET 将 ID HTML 属性添加到表单 这给了我一个类型错误 因为 id 需要一个整数 而不是字符串 如何向我的表单添加 ID 属性 我相信你需要这样的东西 我认为它试图将您的空字符串之
  • 选择聚合函数和所有其他列

    如何方便地选择表中的所有列和聚合函数 IE 假设我有一个包含 100 列的表 我想发送以下内容 SELECT Max Columns 44 ALL OTHER COLUMNS FROM zz Group by ALL OTHER COLUM
  • 如何限制appendonly.aof redis文件的大小

    如何限制appendonly aof文件 我的附加文件增长到 92g 它用于堆栈 gitlab 因此对于会话 这里是信息和 auto aof rewrite 127 0 0 1 6379 gt info Server redis versi
  • 具有不同签名的控制器操作方法

    我正在尝试获取我的网址files id格式 我猜我的控制器中应该有两种 Index 方法 一种带有参数 另一种不带参数 但我在下面的浏览器中收到此错误消息 无论如何 这是我的控制器方法 public ActionResult Index r
  • 片段动画:setCustomAnimations 和 setTransitionStyle 之间的区别

    我想对两个片段之间的过渡进行动画处理 这要归功于FragmentTransaction replace 我想在 XML 文件中指定我的自定义动画 调用有什么区别FragmentTransaction setCustomAnimations
  • 多表单验证codeigniter冲突[重复]

    这个问题在这里已经有答案了 可能的重复 Codeigniter 2个表单在一页上 validation errors问题 https stackoverflow com questions 5802729 codeigniter 2 for
  • 一张有 100 列的大表与许多小表

    我创建了一些网站 其中包含用户 评论 视频 照片 消息等 所有数据都在一张包含 100 列的表中 我认为一张表比多张表更好 因为用户只需要连接一张表 但我听说有些程序员不喜欢这种方法 有人能告诉我哪一个更好吗 一张非常大的表或很多小表 为什
  • 右值参考还是左值?

    我有一个类似性质的问题 就像 5 年前发布的问题一样 为什么右值引用变量不是右值 https stackoverflow com questions 32620750 why are rvalues references variables
  • 如何在Repeater中获取文字内容值

    我有一个中继器 如下所示 如何在代码隐藏中获取报告ID 从hiddenContent2内的表达式 表达式为 注意 我更喜欢一种方法not使用 查找控件 ASP NET
  • 从任何音乐文件 ios 生成波形

    我正在寻找如何根据音乐绘制声波 我想要像这样的图片的波浪 这是一些关于显示音乐中的波浪的讨论 iOS 上的波形 https stackoverflow com questions 8298610 waveform on ios 在 iPho
  • 如何在keras中单独使用Autoencoder的编码器?

    我训练了以下自动编码器模型 input img Input shape 1 32 32 x Convolution2D 16 3 3 activation relu border mode same input img x MaxPooli
  • kubectl删除/创建秘密禁止(谷歌云平台)

    我正在遵循以下关于使用 gitlab 和 Kubernetes 持续集成的教程 在我的例子中是在谷歌云上 https about gitlab com 2016 12 14 continuous delivery of a spring b
  • 禁用(并重新启用)元素上的 href 和 onclick

    我只想启用 禁用onclick和元素 a 或 div 上的 href 我不知道该怎么做 我可以禁用onclick通过在单击事件上添加处理程序 但 href 仍然可用 this unbind click function event even
  • 阻止后退按钮暴露安全页面?

    我遇到了浏览器缓存的 显然是常见的 问题 并且我的安全页面可以通过后退按钮访问 在用户注销后 这是我的 logout php
  • Vue.js/vuex ajax 使用 ajax 状态更新组件

    我将 vue webpack 模板与 vuex 一起使用 基本上遇到组件不随状态更新的问题 我有一家商店 const state userData 在我的应用程序中我有一个方法 methods addUserData function co
  • JSON.parse 如何管理“未定义”?

    我改变了这个 function MangaElt obj use strict this mirror obj mirror this name obj name this url obj url if obj lastChapterRea