index === arr.length - 1 每次都返回 false

时间:2021-05-08 19:26:46

标签: javascript arrays if-statement

我有一个函数 resFormat(restrictions),它将一系列限制作为参数并返回一个包含饮食限制的字符串。当用 ["res1","res2","res3"] 调用它时,它应该返回 "res1, res2, res3"

function resFormat(restrictions){
    let result="",i
    for (i in restrictions){
        if(i===restrictions.length-1){ //always returns false 
            result += restrictions[i]
            continue
        }          
        result += restrictions[i]+", "
    }
    return result
}

console.log(resFormat(["res1", "res2", "res3"]));

这里的 i===restrictions.length-1 应该在循环到达数组的最后一个元素时返回 true,但它总是返回 false。

预期输出:

res1, res2, res3

实际输出:

res1, res2, res3,

2 个答案:

答案 0 :(得分:0)

当您在数组上使用 for..in 时会发生这种情况:它会导致这些类型的错误。 i 将是一个字符串数据类型,而不是数字,因为它迭代属性

如果您使用 == 而不是 === 进行松散的比较,它会起作用,但在迭代数组时避免使用 for..in 仍然更好。

相反,您可以使用本机方法 join 解决此问题:

restrictions.join(", ");

答案 1 :(得分:0)

当 === 更改为 ==

时,您的代码有效
restrictions = ["res1","res2","res3"]
 let result="",i
        for (i in restrictions){
            if(i==restrictions.length-1){  
                result += restrictions[i]
            } 
            else
                result += restrictions[i]+", "
        }

=== 是 JavaScript 中的严格相等比较运算符,对于类型不同的值返回 false。

在这个上下文中,i 指的是字符串,而长度是指数字,你可以通过在 JavaScript 中使用 typeof 命令来检查并检查差异。

=== 仅在两个运算符的类型相同时才有效。 因此,在这种情况下,我建议您使用 == ,这里只是检查内容,而不是操作数的类型,并且非常适合该域。

或者如果你想使用 ===,那么 i 的值必须是数字,而不是字符串

相关问题