这是功能:
var M = [];
function haveComponents () {
var a = 0;
for (var n in this.M) a++;
return a > 0;
}
我想了解:
由于
答案 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数组中的元素数量。
for in
允许您迭代对象的可枚举属性note that this is different from a for each
behaviour,其中迭代是项目而不是属性。在javascript中,这转换为进入原型属性名称并列出它们,可能导致意外结果。 答案 3 :(得分:0)
for(var n in this.M)
遍历this.M
的所有元素,并将它们连续存储在变量n
中。
我不知道this.M
是什么,这取决于代码的来源。
一般来说,我会说这段代码会返回M
是否为空(如果它不为空,则返回true
。)