我很难使用JSLint验证这些行。我假设(可能不正确)他们实际上是有效的。以下是相关代码:
var shadowBox = $('<div/>').appendTo($(document.body));
// ...
shadowBox.css({
left: (e.originalEvent.clientX + 10).toString() + 'px',
top: e.originalEvent.clientY.toString() + 'px'
});
我得到的验证错误是:
第492行的问题字符22:键入confusion:function和.css:object。
shadowBox.css({
和
第494行的问题字符57:输入混淆:数字和'+':字符串。
top:e.originalEvent.clientY.toString()+'px'
我对第一个问题感到困扰,因为这是一个相当常见的jQuery语法。 第二个似乎是误报,因为我将字符串与字符串连接起来。
由于
修改的
找出问题所在:
结果证明JSLint对同一文档中存在的这两种语法模式不满意:
var $var = $('<div/>', {css: {width: '15px'}}); // ONE
$var.css({width : '20px'}); // TWO
答案 0 :(得分:3)
: 输入混淆
JSLint可以进行类型推断。它可以报告案例变量和属性用于容纳多种类型。警告是类型混淆:{a}和{b}。其中{a}和{b}将替换为类型名称。
通常很容易看出导致警告的原因。在某些情况下,它可能非常令人费解。在令人费解的情况下,尝试使用类型值初始化变量。例如,如果您希望n包含数字,则写入
var n = 0;
这应该会产生更明确的警告。
类型混淆不一定是错误,特别是在提供与此类型一样多的类型自由的语言中。但是一些不一致是错误,因此类型规则可能会考虑添加到您的编程风格。此外,最快的JavaScript引擎会在类型混乱的情况下放慢速度。要关闭这些警告,请启用 Tolerate type 混淆option。
var shadowBox = $('<div/>').appendTo($(document.body));
// ...
$(shadowBox).css({
left: String.concat(e.originalEvent.clientX + 10).toString(), 'px'),
top: String.concat(e.originalEvent.clientY.toString(), 'px')
});
对于第二个错误,您可以使用string.concat(e.originalEvent.clientY.toString(),'px')或只是忽略错误。 jslint是一种检测不良做法的工具,但远非完美的工具。
顺便说一句,有一个js验证器比jslint更好:jshint。它没有先生的规则。 crockford喜欢,它有更好的javascript规则。
答案 1 :(得分:2)
事实证明,JSLint已经增加了他们的“类型混淆”规则。
虽然我认为类型混淆的定义纯粹是这样的:
var a = 1;
var b = a + 'string';
事实证明这也被Crockford先生认为是混淆(我并不特别同意他)
function MyObject () {
this.top() {
return '15px';
}
}
var anonObject = {top: '15px'};
var myObject = new MyObject();
var testString = myObject.top();
或jQuery上下文中一个更简单的例子
var $b = $('<div/>').css({top: '15px'}),
a = $b.offset().top + 15;
我的印象是,类型混淆只涉及在范围内改变价值的标识符。虽然克劳福德先生似乎在想:
来自:Douglas Crockford
主题:Re:JSLint类型问题
致:“Anthony S。”
日期:2011年6月23日,星期四,上午11:44
你似乎对什么类型的混淆感到困惑。如果你不这样做 想要看到警告,那么你就没有了。
答案 2 :(得分:0)
关于第一个,是shadowBox.css实际上是一个函数吗?你把它称为好像。 编辑:是的,因为这是一个常规的jQuery对象,所以您正确使用.css
。的 /修改
关于第二个,虽然你没有给出任何背景,但这看起来对我有用。
请注意,jslint不能很好地理解有效的JS,我总是建议不要使用它。