/*global
test: true,
equal: true,
*/
(function () {
"use strict";
test("each() and internals", function () {
var globals = [
new Array(),
new Object(),
new String(),
new Number(),
new Function(),
new Boolean(),
new Date(),
new RegExp()
],
...
我正在写一些QUnit测试,我想传递jslint。我想使用一组全局对象,因为它们与它们的文字表示明显不同。
Jslint除了最后的2之外不喜欢这些。我没有看到放松jslint的活力的选项。
是的,我希望我的功能测试能够传递jslint(而不是jshint)。是的我想使用Object Constructor而不是我的一些测试的文字。
测试失败
Use the array literal notation [].
new Array(),
line 31 character 21
Use the object literal notation {} or Object.create(null).
new Object(),
line 32 character 21
Do not use String as a constructor.
new String(),
line 33 character 21
Do not use Number as a constructor.
new Number(),
line 34 character 29
The Function constructor is eval.
new Function(),
line 35 character 21
Do not use Boolean as a constructor.
new Boolean(),
答案 0 :(得分:2)
来自JSLint说明
http://www.jslint.com/lint.html
JSLint不希望看到包装器形成新的Number,new String,new Boolean。
JSLint不希望看到新的Object。请改用{}。
JSLint不希望看到新的Array。请改用[]。
看起来似乎没有控制
的选项答案 1 :(得分:1)
Jslint怀疑你真的想这样做,因为使用构造函数会使比较意外失败:
var s1 = new String('hi');
var s2 = new String('hi');
// but s1 == s2 is false now! Not to mention 'hi' === s1!
答案 2 :(得分:1)
此行为由以下switch
statement in the JSLint source控制:
switch (c.string) {
case 'Object':
token.warn('use_object');
break;
case 'Array':
if (next_token.id === '(') {
// ...
if (next_token.id !== ')') {
// ...
} else {
token.warn('use_array');
}
// ...
}
token.warn('use_array');
break;
case 'Number':
case 'String':
case 'Boolean':
case 'Math':
case 'JSON':
c.warn('not_a_constructor');
break;
case 'Function':
if (!option.evil) {
next_token.warn('function_eval');
}
break;
case 'Date':
case 'RegExp':
case 'this':
break;
default:
// ...
}
如您所见,除Function
构造函数外,没有选项可以打开或关闭这些检查。可以通过将evil
选项设置为true
来关闭该警告。
在您的情况下,您可以安全地将Array
和Object
构造函数的调用替换为其文字副本。对于其他警告,你别无选择,只能忽略它们。