Fork me on GitHub

JSLint Error Explanations

JSLint will hurt your feelings. It's time to make them better!


Use the object literal notation {}

什么时候会产生这个错误?

JSLint和JSHint(1.0.0版本前)遇到使用new操作符调用Object构造函数时,会抛出"Use the object literal notation {}"错误。下面是一个例子:

为什么会产生这个错误?

抛出这个错误是为了指出那些不必要的啰嗦和潜在的令人感到困惑的代码。在我们去了解为什么上述代码片段会有潜在危险的之前,这里是一个能通过JSLint和JSHint检测使用数组字面量的重写的版本。注意它显然更短:

由于Object构造函数事实上只是全局对象的一个属性,它可以被重写。如果它被重写了的话,那么对于第一个例子而言就可能会产生一个类型错误。例如,如果你运行了一些像Object = 50这样的代码,就会抛出一个类型错误,因为Object不再是一个函数了。

下面是一个将Object构造函数重写的例子。注意JSLint和JSHint并不知道发生了什么事。因此,这是一个安全使用的方法并且完全禁用了Object构造函数:

总是使用字面量的形式可以避免让代码产生这样的问题。注意,字面量的形式和构造函数的方式是一样的(ES5 §11.1.5):

The production ObjectLiteral : { } is evaluated as follows:

    1. Return a new object created as if by the expression new Object() ...

在JSHint1.0.0及以上版本中,这个警告变成了"The object literal notation {} is preferrable".更多相关细节可以在该页面中找到。


comments powered by Disqus