- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对于下面的JS函数:
function cL() {
'use strict';
return console.log.apply(console, arguments);
}
我收到以下 JSLint 测试版错误:
Unexpected 'arguments'.
return console.log.apply(console, arguments);
在旧版本的 JSLint 中,我从来没有遇到过这个错误。
为什么新的 JSLint Beta 不喜欢这个,我该怎么做才能摆脱/抑制这个错误?
谢谢。
最佳答案
我需要一些时间来挖掘新的 JSLint Beta 版本中的变化。存东西后the same since last July康乐福刚changed jslint.js like mad about a week ago ,当测试版被推出时。我猜我们知道为什么他沉默了这么久。
但这是我在代码中挖掘确切位置时的快速版本:JSLint 根本不希望您依赖于arguments
。它使代码(在 JSLint 看来)更难理解。
假设我们将您的代码更改为:
/*jslint white:true, devel:true */
function cL() {
'use strict';
console.log(arguments[0]);
return console.log.apply(console, arguments);
}
即使在 the old JSLint ,你会得到:
Use a named parameter.
console.log(arguments[0]);
JSLint 希望代码更改为使用命名参数,至少...
/*jslint white:true, devel:true */
function cL(p) {
'use strict';
console.log(p[0]);
return console.log.apply(console, p);
}
这也适用于测试版。请注意,我 (natch) 还更改了您对 p
的原始调用中的 arguments
。* 请在下面的注释中查看这意味着什么 JSLint确实遗漏了一些东西,当这些遗漏引起他的注意时,Crockford 将这些遗漏归入。
我不认为有忽略此问题的指令,但修复过程相当轻松。
顺便说一下,因为它让我更容易理解 JSLint 的思想,无论如何,请记住 JSLint's basic motivation is ...
When you intentionally write things that look like errors, it makes it much harder to find the real errors.
To find the needle, make your program look less like a haystack.
没有任何声明的参数然后通过 arguments
引用它们有点像大海捞针,至少从 JSLint 的 Angular 来看是这样。这是有道理的。 function fn()
至少意味着函数中没有使用重要的参数;您只需要关心闭包上下文。 function fn(p)
,虽然参数名很臭,但是用处更大。我知道有什么被传进来了,我会留意针头。 (插入 Arya Stark 引用资料。)
注意:请看下面的评论,我第一次完全没有解释。 arguments
是传递给函数的整个参数数组,这意味着将 arguments
替换为 p
我的初始函数重写将在第一个参数之后删除任何内容。
我假设 OP 可以将所有内容打包到一个数组中,而不是作为单独的参数发送,但这不是一个明显的假设,而且我没有明确假设这是正确的路线。
我的意思是:
cL(arg1, arg2, arg3);
和我的 cL(p)
版本只会在 中有 arg1
p
.var a = [arg1, arg2, arg3];cL(a);
会给出 OP 想要的内容,但需要先定义一个数组。cL([arg1, arg2, arg3]);
与前面的选项相同,但更简洁。这是一个演示:
/*jslint white:true, devel:true */
function cL(p) {
'use strict';
if ("string" === typeof p) {
p = [p];
}
console.log("first arg: " + p[0]);
return console.log.apply(console, p);
}
var arg1 = "a",
arg2 = "b",
arg3 = "c";
cL(arg1, arg2, arg3); // only arg1 is passed. 'a' is all that's output
var a = [arg1, arg2, arg3];
cL(a); // all three argX vars are passed in an array. 'abc'
cL([arg1, arg2, arg3]); // ditto. 'abc'
这是输出(如果您使用的不是 IE9- 没有打开开发工具):
first arg: a
a
first arg: a
a b c
first arg: a
a b c
关于javascript - JSLint 测试版错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30135728/
我有以下功能。其作用是过滤子域中允许的字符。在 JSLint 中我收到以下错误。有什么办法可以做到这一点而不 JSLint 显示错误。我知道我可以忽略 JSLint 设置中的错误,但是有没有其他方法可
我在 jsLint 中收到以下错误: 'document' was used before it was defined. 导致错误的行: document.cookie = name + "=" +
我使用 hallettj / jslint.vim在 Ubuntu 12.04 上,一切正常。但在 Windows 7(x64) 上,它显示错误: Error detected while proce
我遇到了一些麻烦。我把电脑留在家里去了我的避暑别墅几天,当我回到家并尝试将文件保存在 Sublime Text 2 中时,我收到此错误: module.js:340 throw err;
我们刚刚开始使用JSHint / JSLint,并且正在寻找一些“最佳实践”类型设置,这些设置被广泛认为是严格性和实用主义之间的良好折衷。我在互联网上看过一眼,却找不到任何东西。 我意识到这完全取决于
我有一个通过 JSLint 的巨大脚本(包括避免所有不好的部分)。除了一段,这是一些非常复杂的混淆代码,嵌入在更大的上下文中。 JSLint 对此部分产生了相当多的提示,我想为那段代码选择性地禁用它。
我查看了许多关于通过本地包装函数来消除 jslint 中(必要的)未使用参数错误的 stackoverflow 答案,如下所示: /*jslint unparam: true*/ //my funct
使用 jslint 分析文件时,是否可以使用在另一个 js 文件中声明的全局变量? . 目前我必须在标题中声明我所有的全局变量,但是这真的很慢而且不实用。 /* global console, myg
我正在尝试使 makeprg 和 errorformat 与 VIM 和 jslint 一起使用,但似乎无法为我的生活提供正确的错误格式...我正在使用 nodejs 版本的 jslint,它产生如下
我通过 JSLint 运行了以下命令: $(document).ready(function() { /* Add paragraph on page load */
在注释中使用“不安全字符”(例如变音符)时,出现以下错误: This character may get silently deleted by one or more browsers. 有什么方法
在我的 Angular 应用程序中,我使用循环在对象中查找最接近给定数字的值并返回其键。 例如,我想要最接近 0.5 的值: for (var j in nums) { if (0.5 >
我想使用 JSLint ,但我对可以访问我未经过滤的源代码的工具持谨慎态度。是否有离线版本,或者是否有其他类似的工具可以对 JavaScript 离线进行“lint 错误检查”? 编辑:一个带有 GU
我的代码是: name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]"); 我得到: Unexpected '\'. 为什么我会得到这个?我
JSLint 仅适用于一个 JavaScript 文件。最近,我开始将我的程序分成几个部分。 我不想每次使用 JSLint 检查代码时都将这些片段串起来。使用 JSLint 处理多个文件的标准解决方案
我总是通过向数字添加空字符串来将数字转换为字符串: var string = 1 + ''; 但是,JSLint 提示此方法预期为“String”,而看到了“'''”。,而且它看起来确实有点难看。 有
我正在使用 JSLint 来检查以下代码: 'use strict'; var mathService = { add: add, subtract: subtract, multi
所以我用这个检查了我的javascript:http://www.jslint.com/ 如果我不在 { } 之间包装 IF/FOR 语句,我会收到如下“错误”: Problem at line 15
所以我在最新版本的 jQuery 上运行 JSLint,可在 bit.ly/jqsource 获取。 。我已经尽可能宽松地进行了测试,但仍然会出现错误。其中之一是第 327 行的“使用命名参数”: 目
我根据 JSLint 标准(不包括几个选项)进行编码,我认为将其用于我的浏览器内单元测试可能是个好主意,这样我就不会意外地提交任何未通过它的内容.我使用的是 QUnit,但同样适用于任何浏览器内测试框
我是一名优秀的程序员,十分优秀!