Javascript 测试全局构造函数|满足jslint

Javascript 测试全局构造函数|满足jslint,javascript,jslint,qunit,Javascript,Jslint,Qunit,我正在写一些QUnit测试,我想通过jslint。我想使用一组全局对象,因为这些对象与它们的文字表示明显不同 Jslint不喜欢除最后2个之外的任何一个。我看不出有什么办法可以放松jslint的分析 是的,我希望我的功能测试通过jslint(而不是jshint)。是的,我想在一些测试中使用对象构造函数,而不是文本 测试失败 /*global test: true, equal: true, */ (function () { "use strict"; test

我正在写一些QUnit测试,我想通过jslint。我想使用一组全局对象,因为这些对象与它们的文字表示明显不同

Jslint不喜欢除最后2个之外的任何一个。我看不出有什么办法可以放松jslint的分析

是的,我希望我的功能测试通过jslint(而不是jshint)。是的,我想在一些测试中使用对象构造函数,而不是文本

测试失败

/*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()
            ],
            ...

Jslint怀疑您是否真的想这样做,因为使用构造函数会导致比较意外失败:

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(),

更多详细信息:

Jslint怀疑您是否真的想这样做,因为使用构造函数会使比较意外失败:

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(),

更多详细信息:

来自JSLint说明

JSLint不希望看到包装器表单的新编号new 字符串,新布尔值

JSLint不希望看到新对象。改用{}

JSLint不希望看到新的数组。改为使用[]


而且似乎没有任何选项可以控制来自JSLint指令的

JSLint不希望看到包装器表单的新编号new 字符串,新布尔值

JSLint不希望看到新对象。改用{}

JSLint不希望看到新的数组。改为使用[]


而且似乎没有任何选项可以控制该行为,该行为由以下各项控制:

正如您所看到的,除了
函数
构造函数之外,没有打开或关闭这些检查的选项。通过将
evil
选项设置为
true
,可以关闭该警告


在您的情况下,您可以安全地将对
数组
对象
构造函数的调用替换为它们的文本对应项。对于其他警告,您别无选择,只能忽略它们。

此行为由以下因素控制:

正如您所看到的,除了
函数
构造函数之外,没有打开或关闭这些检查的选项。通过将
evil
选项设置为
true
,可以关闭该警告


在您的情况下,您可以安全地将对
数组
对象
构造函数的调用替换为它们的文本对应项。对于其他警告,您别无选择,只能忽略它们。

请注意,使用数组文字和对象文字将产生完全相同的效果,因此可以稍微减少错误集。但是,如果您需要对象而不是其他对象的文本值,我认为您将不得不接受这些警告。或者切换到JSHint…最终意识到,如果您正在测试东西,您在某个级别上故意编写了错误代码,因此我不打算对测试代码使用语法分析。请注意,使用数组文本和对象文本将产生完全相同的效果,因此可以稍微减少错误集。但是,如果您需要对象而不是其他对象的文本值,我认为您将不得不接受这些警告。或者切换到JSHint…最后意识到,如果您正在测试东西,那么您是在某个特定级别上,有目的地编写错误代码,所以我不会对测试代码使用语法分析。
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:
    // ...
}