逻辑(!)对于相同的真实结果返回不同的值

时间:2019-11-29 12:16:48

标签: javascript regex

我将用代码片段进行说明。

const regex = /^[0-9]{4}(-[0-9]{2}){2}(T[0-9]{2}(:[0-9]{2}){2})?$/gm;
// Matches dates of type yyyy-mm-dd and yyyy-mm-ddThh:mm:ss

const date_param = "2019-01-01";

console.log("Value of regex test", regex.test(date_param));
if(!regex.test(date_param))
   console.log("! no parenthesis");

console.log("Value of regex test", regex.test(date_param));
if(!(regex.test(date_param)))
   console.log("! with parenthesis");
   
let result = regex.test(date_param);   
console.log("Result regex test in variable: ", result);   
if(!result)
   console.log("! with the result in a variable. Not seen. But Why?");

有三个独立的代码块,当 regex 返回保存在变量中时,前两个给出不同的结果,而对于我自己来说,我无法找出原因。

代码的前两部分:

console.log(regex.test(date_param));
if(!regex.test(date_param))
   console.log("! no parenthesis");

console.log(regex.test(date_param));
if(!(regex.test(date_param)))
   console.log("! with parenthesis");

为什么,如果 regex.test 返回一个布尔值值,则逻辑运算符无效。来自文档:

  

如果正则表达式与指定的字符串匹配,则为true;否则为false。否则为假。

  

逻辑NOT(!)!expr如果可以将单个操作数转换为true,则返回false;否则,返回false。否则,返回true。

但是,如果您运行代码段并从 regex.test 获得 true ,则逻辑运算符不会切换为false,并且我不明白为什么。

Value of regex test true
! no parenthesis /*this was inside an if with !regex.test, if should have valued to false and not entered */
Value of regex test true
! with parenthesis /* Same thing */

请放心,如果我将 regex.test 值保存在变量中,那么使用

时,它会达到预期的结果

老实说,我不知道如何解释原因。有人可以帮忙吗?

0 个答案:

没有答案