我正在通过最宽松的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)) ) ) {
如何纠正?
答案 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)) ) )