Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用&&;Javascript中的条件_Javascript - Fatal编程技术网

使用&&;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值。谢谢!