我试图在for循环中实现jquery热键。
acKey = [
["keydown", "alt+d", open],
["keydown", "alt+a", close],
["keydown", "alt+s", max],
];
for(i=0;i<=acKey.length;i++)
{
$(document).bind(acKey[i][0], acKey[i][1], acKey[i][2]);
}
然而,事实证明错误未捕获的TypeError:无法读取属性&#39; 0&#39;未定义。我的代码出了什么问题?
答案 0 :(得分:4)
对@Matt给予应有的评价,他的评论指出了它。
循环数组的最常用格式是:
for(var i=0; i<array.length; i++) {
doSomethingWith(array[i];
}
请注意,&#34;小于&#34;小于&#34;操作员,而不是&#34;小于或等于&#34;操作
此循环从0到array.length - 1
计数,因为for
语句的第二部分:i < array.length
,表示&#34;只要i小于数组,就会继续重复。长度。
...那就是你想要的,因为数组的编号从0到长度为1。也就是说,长度为4的数组编号为0,1,2,3。
如果你在i <= 4
循环,那么循环将为0,1,2,3,4执行 - 并且在Javascript中,当它引用undefined
时它将获得array[4]
有时你确实需要&#34;&lt; =&#34;在for循环中,但它非常例外。每次使用&#34;&lt; =&#34;时,请考虑添加评论以说明原因。
答案 1 :(得分:1)
当i = acKey.length。
时,你的问题是你的索引(越界)您可以使用i&lt; acKey.lenght或实现“for each”迭代以避免混淆:
acKey = [
["keydown", "alt+d", open],
["keydown", "alt+a", close],
["keydown", "alt+s", max],
];
var sub;
for(i in acKey) {
sub = acKey[i];
$(document).bind(sub[0], sub[1], sub[2]);
}