`x < y && y > x` 是否有任何理由?
Is there any justification for `x < y && y > x`?
我正在查看一些用于验证表单输入的 Javascript 代码,我注意到一个 if
语句显示 if (!(x < y && y > x)) {...}
我最初的想法是,这种同义反复的结构完全是多余的,两个比较中的一个应该被删除。以防万一我有可能错了,实际上还有更多,不过,我想我会问。
我的另一个想法是,这可能是另一种语言中必需的某些习语的情况,程序员在这里只是出于习惯Javascript Javascript(尽管我会惊讶地发现一种语言需要这样的东西,而且在任何类型的环境中都可以使用。
编辑
特定代码在函数中,用于测试提交事件的开始日期和结束日期是否可行(即结束日期晚于开始日期)。实际示例读取 if(!(start_time < end_time && end_time > start_time)) {...}
,其中 start_time
和 end_time
都是 DateTime
值。
编辑 2
不是 的副本,因为在这种情况下,问题是需要测试在 if
语句中出现相互包含的两个条件,而在这种情况下,问题是如何使if
似乎要求两个互斥条件同时为真的语句解析。
它看起来像一个允许伪值的模式,它转换为数字(没有 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; }
我正在查看一些用于验证表单输入的 Javascript 代码,我注意到一个 if
语句显示 if (!(x < y && y > x)) {...}
我最初的想法是,这种同义反复的结构完全是多余的,两个比较中的一个应该被删除。以防万一我有可能错了,实际上还有更多,不过,我想我会问。
我的另一个想法是,这可能是另一种语言中必需的某些习语的情况,程序员在这里只是出于习惯Javascript Javascript(尽管我会惊讶地发现一种语言需要这样的东西,而且在任何类型的环境中都可以使用。
编辑
特定代码在函数中,用于测试提交事件的开始日期和结束日期是否可行(即结束日期晚于开始日期)。实际示例读取 if(!(start_time < end_time && end_time > start_time)) {...}
,其中 start_time
和 end_time
都是 DateTime
值。
编辑 2
不是 if
语句中出现相互包含的两个条件,而在这种情况下,问题是如何使if
似乎要求两个互斥条件同时为真的语句解析。
它看起来像一个允许伪值的模式,它转换为数字(没有 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; }