我正在审核this line of code。它的表达式如下所示:
!args.value || args.value.length
例如,假设我们这样做:
let v = {};
console.log(!v.value); //logs true
console.log(v.value); //logs undefined
console.log(v.value.length); //Script wont run - cannot read property length of undefined
所以,即使值未定义,我们仍在检查args.value.length(或undefined>是否小于约束?所以我们可以检查这样的事情(IIUC):
true throws
!undefined || undefined.length < 4
所以我认为声明中第一次检查的目的是确保实际定义undefined
?
换句话说它应该是args.value && args.value.length
?或者换句话说:
如果args.value存在,那么检查它的长度?
这里只是完整性的整个代码片段:
if (isMinLength && (!args.value || args.value.length < args.constraints[0])) {
return eachPrefix + "$property must be longer than or equal to $constraint1 characters";
答案 0 :(得分:3)
<
的优先级高于||
:
if (isMinLength && (!args.value || (args.value.length < args.constraints[0]))) {
// ^ ^
如果args.value
不存在,或 .length
太小,则条件匹配。
答案 1 :(得分:1)
起初它实际上是
!args.value || (args.value.length < args.constraints[0])
但你是对的,唯一的区别是
args.value && args.value.length < args.constraints[0]
如果没有定义args.value,那么第一个总是返回false
而第二个返回undefined
。当你在if语句中使用它时,结果并不重要。