当前位置: 代码迷 >> JavaScript >> 动态到达时,JSON 对象属性为“未定义”
  详细解决方案

动态到达时,JSON 对象属性为“未定义”

热度:108   发布时间:2023-06-05 14:14:38.0

我正在将 JSON 导入到我的 JS,但是在尝试使用obj [varWithPropName]访问其属性时遇到了一些问题。

但是,它在使用obj ["PropName"] 时有效

遵循一个简化的剪断,希望它有帮助!

import * as CharInfo from '../Configs/CharInfo.json';
(...)
this.ID = "Maya";

console.log("Maya" === this.ID); //true

console.log(typeof(CharInfo)); //object

console.log(CharInfo["Maya"]); //{configs: {…}, animations: {…}}

console.log(CharInfo[this.ID]); //undefined

这不是与“控制台”相关的问题,因为在 console.log 之外使用时,它会在运行时中断,

Uncaught TypeError: Cannot read property 'animations' of undefined

虽然它是这样工作的,

CharInfo.default[this.ID]; //{configs: {…}, animations: {…}}

我想在使用一些周转之前了解为什么会发生这种情况,因为我没有找到有同样问题的人:) 谢谢!

这应该为您解决问题

从 '../Configs/CharInfo.json' 导入 CharInfo

问题是您默认导出文件 CharInfo.json 中的 JSON。 就像是:

json = { /* your json */ };
export default json;

在导入时,您已经导入了

`import * as CharInfo...`  

它将文件中存在的所有内容导入到一个新变量 CharInfo 中,并且默认导出 json 作为默认值存在于 CharInfo 对象中。

因此,实际的 json 现在可以作为 CharInfo.default 使用。

如果您像import CharInfo from '../Configs/CharInfo.json'这样import CharInfo from '../Configs/CharInfo.json'您将在 CharInfo 中获得 json,而 CharInfo[this.ID] 将正常工作。

希望有帮助,如有问题请回复。