【发布时间】:2015-05-11 20:55:38
【问题描述】:
下面两个 JS 代码的 sn-ps 让我感到困惑,在我看来,由于短路评估,两者应该工作相同。但由于某种原因 sn -p '1' 导致错误(在第三行):
无法读取未定义的属性“匹配”
数组“a”包含用户输入的 3 个字符值。如果 char 未定义、空字符串、字母或数字,我希望代码返回 true。
需要明确的是,当 a = ['a', '/']; 时这会失败
片段 1)
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 吗?
【问题讨论】:
标签: javascript conditional-statements conditional-operator typeof short-circuiting