使用&&;Javascript中的条件
我有这个:使用&&;Javascript中的条件,javascript,Javascript,我有这个: 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
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错误
对不起,打个招呼太麻烦了。当query()返回0个值时会出现问题--字段[0]。id
&&&widget=registry。byId(字段[0].id)仍被解释
我想我是出于安全考虑,因为第二个字段[0].id
只有在字段时才会发生。length
为>0
,然后widget=registry.byId(字段[0].id)
只有在字段[0]时才会发生。id
为true
我错过了什么
Merc.您可能会得到
未捕获的引用错误:赋值中的左侧无效
错误,这是因为您试图计算右侧的registry.byId()
方法并将其赋值到左侧的result
,但由于您没有使用括号限制您的左侧赋值,将考虑引发错误的整个field.length&&field[0].id&&widget
可以通过将上一个条件括在括号中来抑制错误。
if(field.length&&field[0].id&(widget=registry.byId(field[0].id)){
问题是=
运算符的进位比&
运算符的进位低,因此您的代码试图获取以下结果:
field.length && field[0].id && widget
…并为其赋值。您可以通过在赋值周围加括号来解决此问题:
if(field.length && field[0].id && (widget = registry.byId(field[0].id)) ){
(在这个小演示中似乎效果很好:)
进一步阅读:您得到的错误是什么?一个实例也会很有用(在JSFIDLE上),但现在最重要的是知道你得到的错误是什么。对不起,我澄清了这个问题。还有一个答案——缺少括号!你完全正确——问题就在上一个条件的缺少括号中。如果没有,那么这三个条件都将被评估为l值。谢谢!