为什么 arr[0](var = first)没有明确地与 arr[i](计数器变量)进行比较?这里比较什么?

Why isn't arr[0] (var = first) getting compared to arr[i] (the counter variable) explicitly? What is getting compared here?

我的问题的几个部分:假设我的函数参数中有匹配的数字,为什么无论 for 循环计数器中的数字是多少,这段代码都输出 true,例如:

(var i = 54321; i < arr.length; i++)

设置为?此外,我可以在 var first = arr[0] 赋值中输入任何数字,例如 first = arr[12345]; 并且输出仍然为真。我认为 arr[0] 正在与 arr[i] 进行比较,因此计数器需要是 01

看来我可以将任何数字放入计数器 第一个数组中,输出将始终为真。为什么是这样?这里到底发生了什么?

function isUniform(arr){
    var first = arr[0];
    for(var i = 1; i < arr.length; i++){
        if(arr[i] !== first) {
            return false;
        }
    }
    return true;
}

isUniform(2,2,2,2);  // any series of all matching numbers will output true.

这些都是我的问题。非常感谢任何答案。另外,这是我的第一个问题,也是一个相当新手的问题。请随时让我知道我在此处的论坛上做错了什么,如果有的话,以及我或任何人需要进行的任何编辑。谢谢。

你被undefined咬了。 让我们深入挖掘一下。

function isUniform(arr){
    var first = arr[0];
    for(var i = 1; i < arr.length; i++){
        if(arr[i] !== first) {
            return false;
        }
    }
    return true;
}

isUniform(2,2,2,2);  // any series of all matching numbers will output true.

您正在传递 4 个参数,但只读取一个(JavaScript 没有抱怨),并将其称为 arr。因此,在您的示例中,arr == 2。 等于 2,arr[0] 产生未定义。 arr.length 也是未定义的。 所以 for 循环退出,你总是得到 true。您应该使用特殊的 arguments 参数:

function isUniform(){
    var first = arguments[0];
    for(var i = 1; i < arguments.length; i++){
        if(arguments[i] !== first) {
            return false;
        }
    }
    return true;
}

isUniform(2,2,2,2);  // yields true
isUniform(2,3,2,2);  // yields false

参考here