2

我正在尝试遵循 JSLint 约定,但在使用in运算符时遇到了一个奇怪的限制,就像在if (a in b) { ... }上下文中一样。

有没有办法允许这个特定的运营商?我可以忍受 ++ 被 += 1 取代,但没有任何类比in,并且通过禁止它,它使得对继承属性和自身属性的探测非常麻烦,绝对没有理由。

JSLint 本身建议使用hasOwnProperty或比较undefined- 但两者都做错了(可能存在属性,但值为undefined,可能在相关对象的原型上声明属性)。

解决方法是遍历对象的所有属性并将它们与有问题的属性进行比较,但这会立即将 O(1) 操作转换为 O(n)...

4

1 回答 1

0

对于那些在其他情况下使用 JSLint 的人,这里有一些潜在的解决方案:

  1. 编写一个实用程序函数来将in运算符的使用本地化到该函数。然后从 linting 中排除该文件。
  2. 使用 JSLint 的补丁版本(搜索'infix_in'- 我认为注释掉warn()调用会起作用)。
  3. 在 JSLint 输出上运行脚本以过滤掉与 operator 相关的错误in。在这种情况下,字符串是唯一的,因此应该很容易可靠地过滤掉。

顺便说一句,这里提到的另一个烦恼——替换+++= 1——可以关闭。只需使用该plusplus: true选项。

于 2013-05-12T01:57:59.217 回答