我想知道这个foreach循环是如何工作的(参见reset函数)。 我猜我可以调用somePropertyManagerArray.reset();它会在它上面执行一个foreach循环。我没有理解循环中发生的事情。
PropertiesManager = function() {
this.controls = {};
this.controlNames = [];
};
PropertiesManager.prototype = {
// code block removed //
reset: function(selectedControls) {
var controls = this.controls;
**Array.forEach(selectedControls || this.controlNames, function(control) {
controls[control].reset();
});**
}
};
答案 0 :(得分:1)
selectedControls || this.controlNames
表示"循环遍历selectedControls
,但如果它为null或未定义循环this.controlNames
"。
Array.forEach()
的第二个参数是为数组中的每个条目运行的函数,其参数是数组中的当前项(控件)。
答案 1 :(得分:1)
让我以更冗长的方式重写这个功能:
reset: function(selectedControls) {
var controls = this.controls;
var arrayToIterate;
if (selectedControls) {
arrayToIterate = selectedControls;
} else {
arrayToIterate = this.controlNames;
}
Array.forEach(arrayToIterate, function(control) {
controls[control].reset();
});
}
||
运算符是or
运算符。如果第一个值是假的,那么它将使用第二个值。 undefined
,null
以及少数其他值符合falsey
,这是false.
答案 2 :(得分:1)
forEach函数用于为数组中的每个值执行一次或多次函数。 例如:
function logResult(element) {
console.log(element);
}
//and then performing this operation:
["Apples", "Oranges", "Bananas"].forEach(logResult);
//Would log "Apples", then "Oranges", and then "Bananas" to the console.
您的示例中的处理是检查是否定义了selectedControls
。如果是的话,循环它。如果没有,请循环this.controlNames
。
参考: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
答案 3 :(得分:1)
var a = ["a", "b", "c"];
a.forEach(function(entry) {
console.log(entry);
});
这里forEach从索引0开始一次获取一个数组的每个元素(在每个循环中)并打印" a"在第一个循环中," b"在第二循环和" c"在第三循环中。
在控制台输出:b c
你的代码中的:
Array.forEach(selectedControls || this.controlNames, function(control) {
controls[control].reset();
});
它采用selectedControls
数组或对象或controlNames
数组或对象(如果selectedControls为null)并循环遍历此。control
是此处迭代的数组元素通过每个循环。