这个功能的目的是什么?

时间:2013-03-16 01:06:49

标签: javascript

这是功能:

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 个答案:

答案 0 :(得分:1)

  • for(var n in this.M)这是一个for-each循环,用于迭代一组值而不是使用条件。它用于迭代对象的属性。
  • this关键字引用该函数的所有者(其haveComponents函数),而M属性为this
  • 这个函数只是无用地计算M中的元素,看它们是否大于0.虽然计算它们绝对是多余的。

答案 1 :(得分:1)

似乎缺少一些代码。

var M = [];

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

haveComponents: function () {

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

        var a = 0;

创建局部变量a,当代码执行时,为其赋值0

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

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

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

        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;
}

答案 2 :(得分:1)

该函数计算M数组中的元素数量。

答案 3 :(得分:0)

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

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

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