jQuery源代码通过JSLint

时间:2011-08-23 23:48:00

标签: jquery

我正在通过最宽松的JSLint配置从bit.ly/jqsource运行jQuery源代码,但我仍然遇到错误。一个是以下内容:

Problem at line 365 character 83: Expected a conditional expression and instead saw an assignment.

if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {

如何纠正?

3 个答案:

答案 0 :(得分:4)

为什么要“纠正”完全有效的代码行?它只是一种结合布尔逻辑和存储值的相当紧凑的方法。

在if语句中没有赋值的情况下实现相同行为的方法会相当丑陋:

if(deep && copy) {
    var isPlain = jQuery.isPlainObject(copy);
    if(!isPlain) {
        copyIsArray = jQuery.isArray(copy)
    }
    if(isPlain || copyIsArray) {
        // do stuff
    }
}

jslint抱怨的原因是if(foo = 'bar')而不是if(foo == 'bar')是一个常见错误。有些人实际上使用yoda风格的if('bar' == foo)来获取错误,如果他们忘记了第二个=

答案 1 :(得分:1)

copyIsArray = jQuery.isArray(copy)应为copyIsArray == jQuery.isArray(copy)(有条件而非分配)

或者您应该先完成作业:

if ( deep && copy && ( jQuery.isPlainObject(copy) || jQuery.isArray(copy) ) ) {
    copyIsArray = jQuery.isArray(copy);

jQuery.isArray(copy)稍微丑陋的重复。哦,好吧。

示例资源:
有条件:http://www.w3schools.com/js/js_comparisons.asp
作业:http://www.w3schools.com/js/js_operators.asp

答案 2 :(得分:0)

您正在为一个变量分配一个=符号而不是比较它。

if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray **===** jQuery.isArray(copy)) ) ) 
相关问题