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