我有一个函数 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,
答案 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 的值必须是数字,而不是字符串