JSLint一直在抱怨这样的事情
var myArray = [1,2,3]; for (var value in myArray) { // BLAH }
说我应该把它包装在if语句中.我知道如果你在一个对象的属性上循环,你需要包装它,但是我应该在if语句中放入什么来进行正确的过滤.
另外,当我做类似的事情
for (var i = 0; i < 10; i++) { // foo } for (var i =0; i < 20; i++) { // bar }
它抱怨说我已经被定义了.除了使用不同的变量名之外,我该如何防止这种情况?
解决方法
JSLint发出了许多并不是真正有害的东西.在这种情况下,抱怨for …是正确的,因为这是循环数组的错误构造.
这是因为您不仅会获得数字键,还会获得已添加到数组或其Array.prototype中的任何其他任意属性.后者通常来自框架添加的扩展实用程序功能.
虽然你可以用hasOwnProperty打败那个案例来检查它不是原型成员,但是它比用(for var = 0 …)的正确方法更难以解决,所以为什么要这么麻烦.
此外,对于… in,您不一定会按照您的预期按数字顺序获取项目.
It complains that i has already been defined. How do I prevent this other than using different variable names?
是的,你可以忽略那一个.
它希望你从第二个中删除var(i …,因为在同一范围内两次声明一个变量没有做任何事情.但是我建议将var留在那里,因为它不会造成任何伤害,并且如果你将循环移动到另一个块,你不希望它突然在全局变量上涂鸦.