0

这是功能:

var M = [];
function haveComponents () {
        var a = 0;
        for (var n in this.M) a++;
        return a > 0;
    }

我想了解:

  • “for(var n in this.M)”的构造;我习惯了常规的 for 循环,我不熟悉这个结构。
  • “this.M”如何适合代码,即它的用途
  • 一般来说,这个函数可能用于什么。

谢谢

4

4 回答 4

1
  • for(var n in this.M)这是一个for-each循环,用于迭代一组值,而不是使用条件。它用于迭代对象的属性。
  • this关键字指的是函数的所有者(谁是函数haveComponents),whileM是一个属性this
  • 这个函数只是无用地计算元素,M看看它们是否大于 0。不过,为了这个目的,计算它们绝对是多余的。
于 2013-03-16T01:11:48.330 回答
1

似乎缺少一些代码。

var M = [];

为 variable 分配一个新数组M,这似乎是一个全局变量(但可能不是,您只是没有显示足够的代码来正确确定上下文)。

haveComponents: function () {

这似乎是一个对象文字的一部分,它将一个函数分配给一个名为haveComponents.

        var a = 0;

创建一个局部变量a,并在代码执行时为其赋值0

        for (var n in this.M) a++;

创建一个局部变量n并按顺序为其分配任何this.M引用的可枚举属性的名称。如果this是全局对象,M则将是上面初始化的数组。如果不是,它可能是也可能不是别的东西。您尚未显示任何其他作业,或this已设置的内容。

对于每个可枚举的属性M(包括其继承的属性),a将加一。

        return a > 0;
    }

true如果a大于零则返回。

一个等价的函数是:

haveComponents: function () {

    for (var n in this.M) {

      // this.M has at least one enumerable property
      return true;
    }

    // this.M has no enumerable properties
    return false;
}

或者对于纯粹主义者:

haveComponents: function () {
    var hasEnumerable = false;
    for (var n in this.M) {
        hasEnumerable = true;
        break;
    }
    return hasEnumerable;
}
于 2013-03-16T01:25:16.957 回答
1

该函数计算 M 数组中有多少元素。

  • for in允许您迭代对象的可枚举属性,请注意,这for each与迭代针对项目而不是属性的行为不同。在 javascript 中,这转化为进入原型属性名称并列出它们,可能会导致意外结果。
于 2013-03-16T01:25:52.743 回答
0

for(var n in this.M)遍历 的所有元素,this.M依次将它们存储在变量 中n

我不知道是什么this.M,这取决于你的代码来自哪里。

一般来说,我会说这段代码返回是否M为空(true如果不为空则返回)。

于 2013-03-16T01:10:36.210 回答