js范围和属性枚举

时间:2011-07-08 12:23:35

标签: javascript debugging console scope

怪异!

我正在使用javascript为Moodle插件。我不是js的专家,只是刚开始。我在一个被调用的对象的函数中有一些调试代码:

    console.log(M.core_filepicker.instances);
    for (var clientid in M.core_filepicker.instances) {
        console.log(M.core_filepicker.instances[clientid]);
    }

console.log位输出:

Object
4e16f16a0dc14: FilePickerHelper
4e16f16a1837e: FilePickerHelper
4e16f16a03933: FilePickerHelper
4e16f169cd12c: FilePickerHelper
4e16f169d70e0: FilePickerHelper
4e16f169e2466: FilePickerHelper
4e16f169ed42e: FilePickerHelper

具有属性键4e16 ...等的“对象”以及FilePickerHelper类型的这些属性的值。

但是for循环没有运行。

有趣的是,它会在其他范围内运行并遍历属性。在我的浏览器或其他功能的调试控制台中。我不明白为什么会这样。

杰米

3 个答案:

答案 0 :(得分:0)

for (var i = 0; i < myArray.length; i++)

for (var i in myArray)

是不同的结构。在我看来,你的循环中的代码更喜欢第一种类型的for。

什么是

 for (var instance in M.core_filepicker.instances) {
        console.log(instance);
    }

给你?

(如果在for中执行for,请注意hasOwnProperty()。)

答案 1 :(得分:0)

您的for循环以任意顺序输出正确的属性。在Javascript中,迭代属性不指定顺序。

答案 2 :(得分:0)

我继续对这个问题进行反思并在此处正确解决了所发生的事情:http://moodle.org/mod/forum/discuss.php?d=180893