JSLint和JSHint在遇到尝试将Math对象作为函数调用的时候,会抛出"'{a}' is not a function"的错误。JSLint的这个错误是为了当其遇到将JSON对象作为函数调用时而抛出错误设计的,尽管这个功能现在并不是很常见。以下是一个例子:
这个错误的抛出是为了强调对语言的误解。全局对象中的Math属性在规范中是这样被描述的(ES5 §15.8):
The Math object does not have a [[Construct]] internal property; it is not possible to use the Math object as a constructor with the new operator.
The Math object does not have a [[Call]] internal property; it is not possible to invoke the Math object as a function.
这十分清楚的解释了Math对象不能像正常的函数或者构造函数那样被调用。实际上它是一个拥有很多属性的对象,这些属性之中有很多是函数。
JSON对象在规范中以相同的方式被描述(参见 ES5 §15.12),JSLint包含了报告将JSON对象作为函数调用的警告。有一个pull request用来解决这个警告。
在JSHint1.0.0及以上版本中你可以通过一种特殊的选项语法来忽略任意警告。这个警告的标示符是W063。也就意味着你可以通过/*jshint -W063 */
告诉JSHint不再报告这个错误。