gpt4 book ai didi

JavaScript短路评估错误?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:03:59 26 4
gpt4 key购买 nike

下面的两个 JS 代码片段让我感到困惑,在我看来,由于短路评估,两者应该工作相同。但出于某种原因,片段“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;

如果 a[2] 由于“if”中的第一个条件而未定义,那么肯定不应该评估 a[2].match 吗?

最佳答案

答案很简单。看看 order of operations .AND 比 OR 结合更多。

在您的代码段 1 中,表达式如下:

a1 || b1 || (c1 && a2) || b2 || (c2 && a3) || b3 || c3

你的代码片段 2 是这样的:

(a1 || b1 || c1) && (a2 || b2 || c2) && (a3 || b3 || c3)

关于JavaScript短路评估错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28963398/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com