我有这个:
var field = query("form#"+form.id+" input[name='" + error.field + "']");
if(field.length){
if( field[0].id ) {
widget = registry.byId( field[0].id );
if(widget){
...
}
}
我原本以为我可以写:
var field = query("form#"+form.id+" input[name='" + error.field + "']");
if(field.length && field[0].id && widget = registry.byId( field[0].id) ){
...
}
但如果我使用第二个“缩短”形式,我会收到Javascript错误。
抱歉,给一个JSFiddle会很麻烦。当query()返回0值时会发生问题 - field[0].id
&& widget = registry.byId( field[0].id)
仍被解释。
我认为我正在玩它是安全的,因为第二个field[0].id
只会在field.length
为> 0
时发生,然后widget = registry.byId( field[0].id)
只会在field[0].id
时发生是真的......
我错过了什么?
Merc的。
答案 0 :(得分:2)
问题是=
运算符的优先级低于&&
运算符,因此您的代码正在尝试获取结果:
field.length && field[0].id && widget
...并为其指定一个值。你可以通过在作业周围加上括号来解决这个问题:
if(field.length && field[0].id && (widget = registry.byId(field[0].id)) ){
(似乎在这个小演示中工作得很好:http://jsfiddle.net/nnnnnn/4dAfS/)
答案 1 :(得分:1)
您可能会收到Uncaught ReferenceError: Invalid left-hand side in assignment
错误,这是因为您尝试在右侧评估registry.byId()
方法,并在左侧将其分配到result
,但由于您没有限制左侧 - 使用括号进行手工分配,整个field.length && field[0].id && widget
被认为是引发错误的。
您可以通过将最后一个条件包含在括号中来抑制错误。
if(field.length && field[0].id && (widget = registry.byId( field[0].id)) ){