使用JavaScript结合JSON文件根据房间ID获取房间信息时返回undefined的问题排查
为什么通过变量无法正确获取JSON对象的属性?
你的问题核心在于JavaScript对象属性访问方式的使用场景差异,咱们来一步步理清:
错误原因
你现在用的是roomsDB.roomsID这种点表示法,这种写法的规则是:点后面必须是固定的字符串字面量(直接写死的属性名)。所以这里的roomsID会被当成一个字面量属性名,而非你定义的变量——你的JSON里根本没有"roomsID"这个键,自然返回undefined。
而你实际想查找的是变量roomsID的值(也就是"r46")对应的属性,这时候点表示法就不适用了。
解决方案:使用方括号表示法
当需要用变量作为属性名时,必须用方括号表示法obj[variable],它会先解析变量的值,再去对象里匹配对应的键。修改后的代码如下:
function rooms(roomID) { const roomsDB = require("./rooms.json") let roomsID = "r".concat("", roomID).toString() console.log(roomsDB[roomsID]) // 将点改为方括号 } rooms(46)
运行这段代码,控制台就能正确输出house了。
小优化:简化属性名拼接
你拼接字符串的方式可以更简洁,用模板字符串或者直接加号拼接都更直观:
// 模板字符串写法(推荐,可读性更高) let roomsID = `r${roomID}`; // 或者加号拼接 let roomsID = "r" + roomID;
内容的提问来源于stack exchange,提问作者cyliim
相关产品推荐
相关产品推荐

