以下两段JS代码让我感到困惑,因为在我看来,由于短路求值,两者应该是相同的。但是不知为何,在第一段代码中(第三行),会导致错误:
Cannot read property 'match' of undefined
数组'a'保留了3个用户在输入框中输入的字符值。如果字符为未定义、空字符串、字母或数字,则希望代码返回true。
需要明确的是,当a = ['a', '/']时,这段代码会失败。
第一段代码如下:
需要明确的是,当a = ['a', '/']时,这段代码会失败。
第一段代码如下:
return typeof a[0] === 'undefined' || a[0] === '' || a[0].match(/^[a-z0-9]+$/i)
&& typeof a[1] === 'undefined' || a[1] === '' || a[1].match(/^[a-z0-9]+$/i)
&& typeof a[2] === 'undefined' || a[2] === '' || a[2].match(/^[a-z0-9]+$/i);
代码段2)
if (typeof a[0] === 'undefined' || a[0] === '' || a[0].match(/^[a-z0-9]+$/i)) {
if (typeof a[1] === 'undefined' || a[1] === '' || a[1].match(/^[a-z0-9]+$/i)) {
if (typeof a[2] === 'undefined' || a[2] === '' || a[2].match(/^[a-z0-9]+$/i)) {
return true;
}
return false;
}
return false;
}
return false;
如果由于“if”中的第一个条件而导致a [2]未定义,那么应该永远不会评估a [2] .match吧?