对象嵌套数组解构遇ReferenceError: u is not defined问题求助
解构对象遇
u is not defined报错的解决办法 问题详情
我想解构下面的对象得到预期输出,但控制台一直报u is not defined。
原始对象代码(原代码存在语法错误,已修正)
const game = { releases: { "Oath In Felghana": ["USA", "Japan"], } };
我写的解构代码
const { releases: { "Oath In Felghana": o = [u, j], } } = game; console.log(`My Best Release Is ${o} It Released in ${u} & ${j}`);
预期输出
My Best Release Is Oath In Felghana It Released in USA & Japan
实际报错
Uncaught ReferenceError: u is not defined
我以为用了数组解构就能拿到u和j,结果还是报错。任务要求必须用到键和值,我还试过在对象和解构代码中间加这段代码,但没用:
game.releases["Oath In Felghana"] = Object.keys(game.releases["Oath In Felghana"]);
问题出在哪
- 数组解构写法完全错误:你写的
o = [u, j]是给o设置默认值为[u, j],但此时u和j根本未定义,这不是从数组中提取元素的正确姿势。 - 原始对象语法错误:原代码
const game = releases: {...}缺少外层大括号,导致game无法正常创建,这是基础语法问题。 - 多余的
Object.keys操作:"Oath In Felghana"对应的值本来就是["USA", "Japan"],用Object.keys会把它变成["0", "1"],反而破坏了原数据,完全没必要。
正确代码
要同时拿到键(游戏名)和值里的元素,这么写就行:
// 确保对象定义合法 const game = { releases: { "Oath In Felghana": ["USA", "Japan"], } }; // 直接从数组中解构出u和j,游戏名直接使用键字符串 const { releases: { "Oath In Felghana": [u, j] } } = game; const gameName = "Oath In Felghana"; console.log(`My Best Release Is ${gameName} It Released in ${u} & ${j}`);
如果要动态处理releases里的所有游戏,用Object.entries遍历键值对更灵活:
const game = { releases: { "Oath In Felghana": ["USA", "Japan"], } }; // 遍历键值对,同时解构数组元素 for (const [gameName, [u, j]] of Object.entries(game.releases)) { console.log(`My Best Release Is ${gameName} It Released in ${u} & ${j}`); }
说明
- 先修正原始对象的语法错误,添加外层大括号,确保对象能正常定义。
- 解构时,
"Oath In Felghana": [u, j]是直接把对应数组的第一个元素赋值给u,第二个赋值给j,这才是数组解构的正确用法。 - 游戏名作为对象的键,要么直接使用字符串,要么通过
Object.entries动态获取,完全满足“使用键和值”的要求。
内容的提问来源于stack exchange,提问作者zakramy
相关产品推荐
相关产品推荐

