您现在的位置是:知识 >>正文

java集合遍历拿到的值undefind

知识183人已围观

简介第一次遇到集合里取出来的值是 undefined,我盯着控制台看了半天,以为是浏览器抽风。代码明明写着 for (let item of list) { console.log(item.name) ...

第一次遇到集合里取出来的集合值是 undefined,我盯着控制台看了半天,遍历以为是集合浏览器抽风。代码明明写着 for (let item of list) { console.log(item.name) },遍历结果每行都是集合 undefined。后来把整个 item 打出来才发现,遍历集合里根本不是集合对象,是遍历字符串。

这事的集合根源在于 Java 的集合和 JavaScript 的集合经常被混着理解。Java 里 List<String> 遍历拿到 String,遍历List<User> 遍历拿到 User,集合类型是遍历编译期就钉死的。但前端拿到的集合数据往往是后端 JSON 序列化之后的东西,字段名对不上、遍历大小写不一致、集合嵌套层级变了,都会让某个属性变成 undefined。不是集合遍历出了问题,是遍历出来的那个东西本身就没有你要的字段。

我见过一个更隐蔽的情况。后端返回的 JSON 里有个字段叫 userName,前端代码写的是 item.username。JavaScript 对属性名大小写敏感,username 在对象上不存在,读出来就是 undefined。控制台不报错,因为访问一个不存在的属性在 JS 里是合法操作。这种 bug 能藏很久,直到某个页面渲染出空白才被发现。

Java 这边也有类似的坑,只是表现不同。比如用 Map<String, Object> 接收参数,遍历 entrySet 的时候,entry.getValue() 拿到的是 Object,如果实际存的是 null,那取出来就是 null。再往下调用方法直接 NPE。有人会把 null 和 undefined 当成一回事,其实在 Java 里没有 undefined 这个概念,只有 null。前端说的 undefined,到了 Java 这边要么是 null,要么是字段压根不存在。

还有一种情况是集合里混了不同类型。比如 List<Object> 里既有 String 又有 Integer,遍历的时候不判断类型直接强转,ClassCastException 就来了。前端对应的场景是数组里混了对象和字符串,遍历时对字符串取 .name,得到 undefined。类型不一致的问题在动态语言里不会立刻爆炸,但会在某个具体操作上暴露出来。

怎么排查?我的习惯是先把集合本身打印出来,看结构。不要只看 item.name,要看 item 到底是什么。Java 里用 System.out.println(list) 或者断点看变量,前端直接 console.log(JSON.stringify(list, null, 2))。结构清楚了,问题基本就定位了。十次里有八次是字段名写错或者数据结构跟预期不符。

另外,别太相信接口文档。文档说返回 { name: string },实际可能返回 { data: { name: string } }。中间多了一层,遍历的时候没剥开,拿到的就是 undefined。这种问题在联调阶段特别常见,后端改了结构没同步文档,前端按老文档写代码,两边都没错,但就是对不上。

说到底,集合遍历拿到 undefined 不是遍历语法的问题,是数据本身的问题。遍历只是把集合里的元素一个一个拿出来,拿出来的是什么,取决于你放进去的是什么,或者接口传过来的是什么。把注意力从遍历写法转移到数据来源和结构上,这类问题会好查很多。

Tags:

相关文章

  • 中考报名后泄漏的风险

    知识

    中考报名刚结束,孩子回来跟我说,学校要求填了一堆信息,包括身份证号、家庭住址、父母手机。我随口问了一句,这些信息谁管?他说不知道,反正交上去了。我心里咯噔一下,想起去年邻居家孩子中考后接到的电话——对 ...

    【知识】

    阅读更多
  • 深圳黑洞论坛

    知识

    ```html 深圳黑洞论坛 body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helve ...

    【知识】

    阅读更多
  • 怎么破解原创力文档的付费文件

    知识

    去年帮一个做教辅的朋友找资料,他甩过来一个原创力文档的链接,说里面有一份中考物理专题汇编,下载要39块。我点开一看,预览页能翻前五页,后面全是模糊缩略图。他问我能不能搞下来,我说试试看。结果折腾了半小 ...

    【知识】

    阅读更多


友情链接