正确性!args.value || args.value.length?

时间:2018-06-12 15:48:51

标签: javascript typescript

我正在审核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";

2 个答案:

答案 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语句中使用它时,结果并不重要。