java集合遍历拿到的值undefind
第一次遇到集合里取出来的集合值是 这事的集合根源在于 Java 的集合和 JavaScript 的集合经常被混着理解。Java 里 我见过一个更隐蔽的情况。后端返回的 JSON 里有个字段叫 Java 这边也有类似的坑,只是表现不同。比如用 还有一种情况是集合里混了不同类型。比如 怎么排查?我的习惯是先把集合本身打印出来,看结构。不要只看 另外,别太相信接口文档。文档说返回 说到底,集合遍历拿到 undefined 不是遍历语法的问题,是数据本身的问题。遍历只是把集合里的元素一个一个拿出来,拿出来的是什么,取决于你放进去的是什么,或者接口传过来的是什么。把注意力从遍历写法转移到数据来源和结构上,这类问题会好查很多。undefined,我盯着控制台看了半天,遍历以为是集合浏览器抽风。代码明明写着 for (let item of list) { console.log(item.name) },遍历结果每行都是集合 undefined。后来把整个 item 打出来才发现,遍历集合里根本不是集合对象,是遍历字符串。List<String> 遍历拿到 String,遍历List<User> 遍历拿到 User,集合类型是遍历编译期就钉死的。但前端拿到的集合数据往往是后端 JSON 序列化之后的东西,字段名对不上、遍历大小写不一致、集合嵌套层级变了,都会让某个属性变成 undefined。不是集合遍历出了问题,是遍历出来的那个东西本身就没有你要的字段。userName,前端代码写的是 item.username。JavaScript 对属性名大小写敏感,username 在对象上不存在,读出来就是 undefined。控制台不报错,因为访问一个不存在的属性在 JS 里是合法操作。这种 bug 能藏很久,直到某个页面渲染出空白才被发现。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。这种问题在联调阶段特别常见,后端改了结构没同步文档,前端按老文档写代码,两边都没错,但就是对不上。
-
上一篇
-
下一篇
- 随机阅读
- 搜索
-
- 友情链接
-