amo*_*ran 41 javascript validation xor
我试图通过以下方式在javascript中实现XOR:
// XOR validation
if ((isEmptyString(firstStr) && !isEmptyString(secondStr)) ||
(!isEmptyString(firstStr) && isEmptyString(secondStr))
{
alert(SOME_VALIDATION_MSG);
return;
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法在JavaScript中执行此操作?
谢谢.
swe*_*rup 55
正如其他人所指出的那样,逻辑XOR对于布尔值来说是不相等的,所以你可以这样做:
// XOR validation
if( isEmptyString(firstStr) != isEmptyString(secondStr) )
{
alert(SOME_VALIDATION_MSG);
return;
}
Run Code Online (Sandbox Code Playgroud)
Ein*_*eki 34
我假装你正在寻找一个逻辑XOR,因为javascript已经有一个按位(^):)
我通常使用一个简单的三元运算符(我很少使用其中一个):
if ((isEmptyString(firstStr) ? !isEmptyString(secondStr)
: isEmptyString(secondStr))) {
alert(SOME_VALIDATION_MSG);
return;
}
Run Code Online (Sandbox Code Playgroud)
编辑:
致力于@Jeff Meatball Yang 解决方案
if ((!isEmptyString(firstStr) ^ !isEmptyString(secondStr))) {
alert(SOME_VALIDATION_MSG);
return;
}
Run Code Online (Sandbox Code Playgroud)
你否定了值以便在布尔值中转换它们然后应用按位xor运算符.也许它不像第一个解决方案那么可维护(或者我可能已经习惯了第一个解决方案)
Jef*_*ang 11
你正在做一个布尔值的XOR,很容易建模成一个按位XOR(Javascript有):
var a = isEmptyString(firstStr) ? 1 : 0;
var b = isEmptyString(secondStr) ? 1 : 0;
if(a ^ b) { ... }
Run Code Online (Sandbox Code Playgroud)
http://www.howtocreate.co.uk/xor.html
您可以^直接使用按位XOR运算符():
if (isEmptyString(firstStr) ^ isEmptyString(secondStr)) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
它将适用于您的示例,因为布尔值true和false值被转换为1并且0因为按位运算符使用32位整数.
该表达式也将返回0或1,并且该值将被if语句强制回布尔值.
您应该知道上述方法发生的类型强制,如果您正在寻找良好的性能,我不建议您使用按位运算符,您也可以使用仅逻辑逻辑来创建一个简单的函数运营商:
function xor(x, y) {
return (x || y) && !(x && y);
}
if (xor(isEmptyString(firstStr), isEmptyString(secondStr))) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
一种方法更简单:
if ((x+y) % 2) {
//statement
}
Run Code Online (Sandbox Code Playgroud)
当然假设两个变量都是真正的布尔值,即1或者0.
x === y你得到一个偶数,那么XOR就是0.x !== y那时你会得到一个奇数,所以XOR将是1:)第二种选择,如果您注意到x != y评估为XOR,那么您必须做的就是
if (x != y) {
//statement
}
Run Code Online (Sandbox Code Playgroud)
这将再次评估为异或.(我更喜欢这个)
当然,一个好主意是将它实现为一个函数,但它只是你的选择.
希望这两种方法中的任何一种都能帮到别 我将此答案标记为社区维基,因此可以进行改进.
在javascript中查看XOR的不同实现的这种解释.
只是在这里总结一些:
if( ( isEmptyString(firstStr) || isEmptyString(secondStr)) && !( isEmptyString(firstStr) && isEmptyString(secondStr)) ) {
alert(SOME_VALIDATION_MSG);
return;
}
Run Code Online (Sandbox Code Playgroud)
要么
if( isEmptyString(firstStr)? !isEmptyString(secondStr): isEmptyString(secondStr)) {
alert(SOME_VALIDATION_MSG);
return;
}
Run Code Online (Sandbox Code Playgroud)
要么
if( (isEmptyString(firstStr) ? 1 : 0 ) ^ (isEmptyString(secondStr) ? 1 : 0 ) ) {
alert(SOME_VALIDATION_MSG);
return;
}
Run Code Online (Sandbox Code Playgroud)
要么
if( !isEmptyString(firstStr)!= !isEmptyString(secondStr)) {
alert(SOME_VALIDATION_MSG);
return;
}
Run Code Online (Sandbox Code Playgroud)
从引用此文章:
不幸的是,JavaScript没有逻辑XOR运算符.
您可以通过以下方式"模拟"XOR运算符的行为:
if( !foo != !bar ) {
...
}
Run Code Online (Sandbox Code Playgroud)
链接的文章讨论了几种替代方法.
| 归档时间: |
|
| 查看次数: |
22752 次 |
| 最近记录: |