这是功能:
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”如何适合代码,即它的用途
- 一般来说,这个函数可能用于什么。
谢谢
这是功能:
var M = [];
function haveComponents () {
var a = 0;
for (var n in this.M) a++;
return a > 0;
}
我想了解:
谢谢
for(var n in this.M)
这是一个for-each循环,用于迭代一组值,而不是使用条件。它用于迭代对象的属性。this
关键字指的是函数的所有者(谁是函数haveComponents
),whileM
是一个属性this
M
看看它们是否大于 0。不过,为了这个目的,计算它们绝对是多余的。似乎缺少一些代码。
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;
}
该函数计算 M 数组中有多少元素。
for in
允许您迭代对象的可枚举属性,请注意,这for each
与迭代针对项目而不是属性的行为不同。在 javascript 中,这转化为进入原型属性名称并列出它们,可能会导致意外结果。for(var n in this.M)
遍历 的所有元素,this.M
依次将它们存储在变量 中n
。
我不知道是什么this.M
,这取决于你的代码来自哪里。
一般来说,我会说这段代码返回是否M
为空(true
如果不为空则返回)。