不清楚这个JavaScript代码是如何工作的。

时间:2014-09-02 20:10:04

标签: javascript

我想知道这个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();
        });**
    }
};

4 个答案:

答案 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运算符。如果第一个值是假的,那么它将使用第二个值。 undefinednull以及少数其他值符合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是此处迭代的数组元素通过每个循环。