Javascript 为什么我的情况总是正确的
在这个例子中,我想知道为什么我的条件总是正确的?谢谢Javascript 为什么我的情况总是正确的,javascript,lodash,Javascript,Lodash,在这个例子中,我想知道为什么我的条件总是正确的?谢谢 function bla() { var qix = 'z' if (qix === 'a' || 'b' || 'c') { console.log('condition ok!! whats wrong???') } } 代码的问题是if表达式的计算结果总是true qix === 'a' || 'b' || 'c' 实际上会变成这样: false || 'b' || 'c' 由于qix被设置为z。由于输入松散
function bla() {
var qix = 'z'
if (qix === 'a' || 'b' || 'c') {
console.log('condition ok!! whats wrong???')
}
}
代码的问题是
if
表达式的计算结果总是true
qix === 'a' || 'b' || 'c'
实际上会变成这样:
false || 'b' || 'c'
由于qix
被设置为z
。由于输入松散,JavaScript返回第二个表达式的true
,因为“b”是a。要更正此问题,需要按如下方式更改表达式:
qix === 'a' || qix === 'b' || qix === 'c'
因此,它正确地表示您期望的内容。JavaScript为第二个or表达式返回true,因为“b”始终为true 您需要对照qix检查每个值,如下所示:
var qix='z'
如果(qix=='a'| | qix=='b'| | qix=='c'){
console.log('条件正常!!怎么了?')
}
如我们所知,|
(或
逻辑运算符)如果其中一个操作数为true,则返回true
。在if条件中,第二个和第三个操作数中的qix==='a'| |'b'| |'c'
是字符串,字符串被视为false
当且仅当它们为空,否则为true。因此,你的情况总是正确的
需要检查qix,如qix=='b'
var qix='z'
如果(qix=='a'| | qix=='b'| | qix=='c'){
console.log('条件正常!!怎么了?')
}
否则{
console.log('else')
}expr1 | | expr2的说明来自:
如果可以将expr1转换为true,则返回expr1;否则,返回expr2。因此,当与布尔值一起使用时,如果任一操作数为真,则返回真
假设qix不是'a'
,那么这个表达式来自您的代码:
qix === 'a' || 'b' || 'c'
第一个术语qux=='a'
是false
,其计算结果当然为false。这导致它转到下一个术语,即'b'
。非空字符串的计算结果为true
,因此它停止在那里,变成'b'
。现在,您的if语句可以被认为是:
if ('b')
同样,'b'
的计算结果为true
。因此,您的条件实际上什么也没做。您可以使用Regex:qix.match(/^(a | b | c)$/)
如果qix
等于a
或b
或c
var qix='z';
if(qix.match(/^(a | b | c)$/){
console.log('条件正常!!怎么了?');
}否则{
console.log('else');
}
我认为您缺少两个概念
首先是| |运算符的工作原理,然后是javascript值的强制
在代码中:
if ('z' === 'a' || 'b' || 'c') { ----}
将始终计算为true
。
原因是| |运算符将返回强制为true的第一个值,而不实际强制该值。关联性(运算符的执行顺序)是从左到右的。这意味着发生以下情况:
首先,将评估以下内容,因为其具有更高的可用性:
然后,我们将从左到右计算以下表达式:
false || 'b' || 'c'
设foo=false | |'b'
console.log(foo)
这是因为“如果条件”是采取3种可能的选项
首先说qix==='a',这是错误的,但您询问的是'b','c'和此选项的值是真的,因为您没有将var qix与'b'或'c'进行比较,您只询问条件,如果'b'或'c'是值
运算符| |它是这样使用的
if(First Condition || Second Condition || third condition){
if at least one of these options is true, then enter here
}
在ECMAScript 2016中为数组合并了一个includes()方法,该方法专门解决了问题的答案
if (['b', 'c', 'a'].includes(qix)) {
this is false
}
if (['z', 'c', 'a'].includes(qix)) {
this is true
}
或者你可以这样写
function bla() {
var qix = 'z'
if (qix === 'a' || qix === 'b' || qix === 'c') {
console.log('condition ok!! whats wrong???')
}
}
在您的情况下有两个“c”
。您误解了|
操作符的工作原理。可能重复@TakitIsy。始终使用==
和==
被认为是良好的做法,只有在适用时才使用@TakitIsy很少。当您实际需要处理不同类型的值时。因为这是一个明显的重复问题。适用于当前的两个答案:否决,因为“改为尝试此”或“您需要使用此”不是“为什么”问题的答案。因为这是一个明显的重复问题。@Xufox感谢您发现我的错误。我换了答案。
if (['b', 'c', 'a'].includes(qix)) {
this is false
}
if (['z', 'c', 'a'].includes(qix)) {
this is true
}
function bla() {
var qix = 'z'
if (qix === 'a' || qix === 'b' || qix === 'c') {
console.log('condition ok!! whats wrong???')
}
}