JSON.parse如何管理'未定义'
How does JSON.parse manage 'undefined'?
我转换了这个:
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
。这就是我提出问题的原因:
- 为什么
JSON.parse
将undefined
解释为字符串,比如MDN;语法错误";对于undefined
- 那么,我应该在解析值之前检查该值是否是正确的字符串吗
- JSON.parse不应该在解析的值为
undefined
时进行检查,然后只返回undefined
吗?(这可能会引发争论,所以,如果你认为这是好的,就忽略这个问题,或者说我只是错了。) - 如果#2是肯定的,那么仅仅添加一些条件作为第一个剪切就足够了,对吧?或者我应该转到调用MangaElt的函数,并确保
obj.listChaps
是一个数组,而忽略这里的JSON.parse
吗?。(这始终是字符串中的数组或伪数组,由于这是一个协作项目,因此可能有人对此有原因)
好奇的人可能会问:"你犯了什么错误?"这是吗
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
这就是现有条目的样子,它们不会产生错误。这是我提出问题的原因。钥匙的类型总是相同的,并且事先经过测试:
name
是字符串mirror
是字符串url
是字符串- CCD_ 13是一个";阵列";在绳子里面
ts
和upts
为整数
顺便说一句,obj
是一个对象,但我认为它几乎是不可能错过的。此外,这是一个Chrome扩展,但我不认为这是相关的。在此处完成脚本。
undefined
不是有效的JSON令牌。将未定义的值转换为JSON时,正确的做法是将其呈现为null。
undefined
不是JSON文件中的合法令牌(请参见www.JSON.org),也不是JSON.parse
可接受的参数- 您的代码在语义上与以前的版本不相同。以前版本中的许多测试比新版本更详尽(也不容易出错)
- 如果代码按要求工作,为什么要"重构"代码?你没有重构它——你已经破坏了它
相关文章:
- 为什么“;未定义的“;在JavaScript中结束循环
- 要求未定义JS回调参数
- 如何检查管道中未定义的项目
- TypeError:无法读取属性'推'未定义的JavaScript
- $window.ga在AngularJS事件中未定义
- 未捕获的TypeError无法读取未定义的属性socialsharing
- 为什么grunt contrib connect的中间件选项的第三个参数是未定义的
- 无法获取属性'selectedIndex'的未定义引用或null引用
- 如何消除代码中的未定义和其他问题
- 未捕获的ReferenceError:$未定义
- this.router在AngularJS 2中未定义
- 未捕获的类型错误:无法读取属性'删除'的未定义
- 节点fs.stat名称未定义
- 尝试在PHP中回显输入文本时出现未定义的索引错误
- Jquery未定义函数正在停止其他操作
- AngularJS指令出错-无法读取属性'编译'的未定义
- 我使用谷歌标签管理器在我的网站上启动标签.变量“;未定义的“;在任何版本的Internet Explorer的自定义代码
- JSON.parse如何管理'未定义'
- 谷歌标签管理器中的值未定义,但控制台中的值可以
- 谷歌标记管理器未定义