JSLint类型混淆:jQuery .css()的函数和对象

我很难让这些行使用JSLint进行validation。 我假设(可能不正确)他们实际上是有效的。 这是相关的代码:

var shadowBox = $('
').appendTo($(document.body)); // ... shadowBox.css({ left: (e.originalEvent.clientX + 10).toString() + 'px', top: e.originalEvent.clientY.toString() + 'px' });

我得到的validation错误是:

第492行的问题字符22:键入confusion:function和.css:object。

shadowBox.css({

第494行问题57:输入混淆:数字和’+’:字符串。

顶部:e.originalEvent.clientY.toString()+’px’

我对第一个问题更感到困扰,因为这是一个相当常见的jQuery语法。 第二个似乎是误报,因为我将字符串与字符串连接起来。

谢谢

编辑

弄清楚问题:

事实certificate,JSLint对同一文档中存在的这两种语法模式不满意:

 var $var = $('
', {css: {width: '15px'}}); // ONE $var.css({width : '20px'}); // TWO

来自jslint :输入Confusion

JSLint可以进行类型推断。 它可以报告案例变量和属性用于容纳多种类型。 警告是类型混淆:{a}和{b}。 其中{a}和{b}将替换为类型名称。

通常很容易看出导致警告的原因。 在某些情况下,它可能非常令人费解。 在令人费解的情况下,尝试使用类型值初始化变量。 例如,如果您希望n包含数字,那么写

 var n = 0; 

这应该产生更明确的警告。

类型混淆不一定是错误 ,特别是在提供与此类型一样多的类型自由的语言中。 但是一些不一致是错误,因此类型规则可能会考虑添加到您的编程风格。 此外,最快的JavaScript引擎会在类型混乱的情况下放慢速度。 要关闭这些警告,请启用“ 容忍类型”混淆选项 。

 var shadowBox = $('
').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是一种检测不良做法的工具,但远非完美的工具。

顺便说一句,有一个jsvalidation器比jslint更好: jshint 。 它没有先生的规则。 crockford喜欢,它有更好的javascript规则。

事实certificate,JSLint增加了他们的“类型混淆”规则。

而我认为类型混淆的定义纯粹是这样的:

 var a = 1; var b = a + 'string'; 

事实certificate这也被Crockford先生认为是混淆(我并不特别同意他)

 function MyObject () { this.top() { return '15px'; } } var anonObject = {top: '15px'}; var myObject = new MyObject(); var testString = myObject.top(); 

或者是jQuery上下文中一个更简单的例子

 var $b = $('
').css({top: '15px'}), a = $b.offset().top + 15;

我的印象是类型混淆只涉及在范围内改变价值的标识符。 虽然克劳福德先生似乎认为:

来自:Douglas Crockford

主题:Re:JSLint类型问题

致:“Anthony S.”

日期:2011年6月23日,星期四,上午11:44

你似乎对什么类型的混淆感到困惑。 如果您不想看到警告,那么您不必这样做。

关于第一个,是shadowBox.css实际上是一个函数吗? 你把它称为好像。 编辑 :是的,因为这是一个常规的jQuery对象,你正确使用.css/编辑

关于第二个,这看起来对我有用,虽然你没有给出任何背景。

请注意,jslint不能很好地理解有效的JS,我总是建议不要使用它。