x <y && y> x`是否有正当理由?

时间:2018-08-07 06:37:37

标签: javascript logical-operators boolean-expression

我正在查看一些用于验证表单输入的Javascript代码,我注意到一条if语句,其内容为if (!(x < y && y > x)) {...}

我最初的想法是,这种重言式的构造是完全多余的,应该删除两个比较之一。万一我有可能错了,但实际上还有很多,我想我会问。

我的另一种想法是,可能是某些惯用语在另一种语言中是必需的,程序员在这里只是出于习惯将它们带到Javascript中(尽管我很惊讶地发现一种语言这样的东西是必需的,也可以在任何类型的环境中使用。

编辑

该函数中的特定代码用于测试提交事件的开始日期和结束日期是否可能(例如,结束日期在开始日期之后)。实际示例读取if(!(start_time < end_time && end_time > start_time)) {...},其中start_timeend_time均为DateTime值。

编辑2

不是this question的重复项,因为在这种情况下,问题是需要测试在if语句中包含在一起的两个条件,而在这种情况下,问题是如何制作{ {1}}语句resolve似乎需要同时存在两个互斥条件。

1 个答案:

答案 0 :(得分:5)

看起来像是允许伪造的值的模式,伪造的值会转换为数字(没有NaN,例如''null)。

function f(x, y) {
    return [!(x > y && y < x), x <= y, x < y || x === y].join(' ');
}

console.log(f(1, 2));                 //  true
console.log(f(2, 1));                 // false
console.log(f(1, 1));                 //  true
console.log(f('', 1));                //  true
console.log(f(1, ''));                // false
console.log(f('', ''));               //  true
console.log(f(undefined, undefined)); //  true \
console.log(f(1, undefined));         //  true  different values by using other comparisons
console.log(f(undefined, 1));         //  true /
console.log(f(null, null));           //  true
console.log(f(1, null));              // false
console.log(f(null, 1));              //  true
.as-console-wrapper { max-height: 100% !important; top: 0; }