【问题标题】:Accessing Object Elements via For Loop通过 For 循环访问对象元素
【发布时间】:2012-12-23 02:24:11
【问题描述】:

好吧,我已经厌倦了很多东西。我仍然很困惑,我知道答案会很简单,但我还是要问。

我有一个函数:

Module.load = function(a) {
  require("./modules/"+a+".js");
  Module.loaded.push(a);
  Log("Loaded Module: "+a); 
};

并使用Module.load('basic'); 加载基本文件。 现在,我通过一个对象来定义模块:

Modules = { basic:1,queue:0,admin:1,notify:0 }

所以我写了这个函数:

for (x in Modules) { if (Modules[x] == 1) Module.load(x); };

但它不起作用,对于我的生活,我不知道为什么。

【问题讨论】:

  • “不工作”是什么意思?你没有看到Log() 的输出?此外,您正在使 x 成为没有 var 的全局变量。
  • 让我添加 'var' 看看会发生什么,笨蛋。是的,我没有看到日志的输出,也无法访问加载的文件。
  • 只需添加 'var' 就可以了。我觉得自己完全迟钝了,但我是这样预测的。谢谢!
  • 只是好奇,有人能解释一下为什么var 在这里很重要吗?这是特定于节点的东西吗? (我知道 Javascript,但从未使用过节点。)
  • 如果您使用全局变量,您可能会在 load() 正在调用的函数之一的其他地方使用 x 全局变量。养成始终将变量设为本地变量的习惯是个好主意。

标签: javascript node.js for-loop


【解决方案1】:

代码有效:

var Module = {}; Module.load = function(a) {
  console.log("Loaded Module: "+a); 
};

var Modules = { basic:1,queue:0,admin:1,notify:0 }

for (var x in Modules) { if (Modules[x] == 1) Module.load(x); };
Loaded Module: basic
Loaded Module: admin

因此问题一定出在其他地方。确保:

  • 您没有任何语法错误
  • Module.loaded 存在并且是一个数组
  • require 被定义为一个函数并且不会崩溃
  • Log 被定义为一个函数并且不会崩溃

【讨论】:

  • 问题是我没有'var'。我刚刚有for (x...)
  • "use strict" 应该有助于捕获这些错误。使用 use strict 定义,你会得到一个很好的错误,比如ReferenceError: x is not defined
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-29
  • 2023-03-07
  • 2016-02-12
  • 2012-10-05
  • 2020-04-14
  • 2021-07-13
  • 1970-01-01
相关资源
最近更新 更多