Javascript条件空字符串

时间:2018-04-17 10:11:34

标签: javascript validation date conditional-statements

我想验证日期(在arg中传递为格式化为99/99/9999的字符串)。根据我的需要,空/ null /未定义的字符串应该被认为是好的。

这是我的验证功能:

function isDateValid(date) {
    if(date && date.length == 0){
        return true;
    }
    //more checks
}

我得到了奇怪的结果,我无法解释:

  • 使用空字符串(字符串为0个字符长度),条件将被计算为空字符串,因此无法到达return true

  • 使用填充字符串(例如:" 01/01/208"),条件将计算为false布尔值。

我知道如何更改以使代码按需要运行....但是这让我感到厌倦了解为什么这有两个不同的comportement(一次是字符串,一次布尔)。

我需要一个队长!

添加一些console.log作为

function isDateValid(date) {
    console.log(date);
    console.log(date.length);
    console.log(date && date.length == 0);
    console.log(typeof (date && (date.length == 0)));
    if(date && date.length == 0){
        return true;
    }
    //more...
}

将产生以下输出:

with 01/01/2018 with empty string

这是一个小提琴https://jsfiddle.net/v8easudj/2/

2 个答案:

答案 0 :(得分:2)

JavaScript的概念为truthyfalsy coercion所以“”(空字符串),null和undefined(以及其他一些)都是假的,所以

if (!date)
    return true;

将同时检查date是否为null,undefined或空字符串并返回true。

有关更多信息,请查看有关MDN的文章

答案 1 :(得分:1)

正如其他答案所述,JavaScript有一个真值和假值的概念 - 即当你将它们用作布尔时隐含地被视为truefalse的值(如if中所示陈述或条件算子)。

特别是,空字符串是假的。

在你的情况下,你得到一个不同的typeof,因为&&布尔运算符在一个假值上被短路。它停止进一步评估并返回左操作数。

所以你输入一个空字符串,&&停在那里,你得到左边的typeof - 即空字符串。

您输入非空字符串,&&继续,您获得其右操作数的typeof - 即<{1>} 布尔结果date.length == 0 }。