JS逻辑运算符
JS logical operators
var
type = 'foo',
type2 = 'bar',
result = 0;
type == 'foo' && result++;
console.log(result); // 1
!type == 'foo' || result++;
console.log(result); // 2
type == 'foo' && type2 == 'bar' && result++;
console.log(result); //3
type == 'foo' && type2 == 'bar' && result == 3 && (result=0); //parentheses avoid "invalid assignment left-hand side" error
console.log(result); //0
type == 'OOF' || result++; //equivalent: type != 'OOF' && result++;
console.log(result); //1
它以什么顺序工作?
type == 'foo' && result++;
!type == 'foo' || result++;
全文(https://github.com/shichuan/javascript-模式/斑点/主/一般-patterns/conditionals.html)
让我们分解一下:
type == 'foo' && result++;
由于短路评估,第二部分result++
只有在type == 'foo'
时才进行评估。 相当简单的案例,对吧? 让我们看一下第二个条件:
!type == 'foo' || result++;
这可能不会像您认为的那样。 您正在将类型评估为布尔值,在这种情况下,任何非空字符串都将返回 true。 你否定了这个值,所以你会得到假。 将错误与'foo'
进行比较会让你变得错误。 为了短路该表达式,第一部分必须是真的,但它是假的,所以简而言之,result++
将始终被评估。
您可能的意思如下:
!(type == 'foo') || result++
或者同样可以接受:
type != 'foo' || result++
让我们看一下以下内容:
type == 'foo' && type2 == 'bar' && result == 3 && (result=0)
如果类型为 foo,则它计算下一部分,因此type2 == 'bar'
. 如果这也是真的,那么它将评估result == 3
. 如果这是真的,则结果将分配给 0,因为您没有检查等价性。 因此,从本质上讲,如果类型为"foo",类型2为"bar",结果为3,则将结果设置为0。
了解它的工作原理很重要,但永远不要在实际代码中的条件中添加增量或赋值语句。 众所周知,即使您写了它,如果自您编写以来已经过去了足够的时间,它们也很难发现。
希望有帮助。
相关文章:
- Javascript逻辑运算符和字符串/数字
- Javascript,如果条件在没有&&逻辑运算符当&&它不起作用
- 用于验证JS中逻辑运算符表达式的正则表达式
- 为什么在javascript函数声明中使用逻辑运算符
- 为什么这个while循环不能使用AND逻辑运算符
- 逻辑运算符混淆
- IF ELSEIF语句中的Java脚本逻辑运算符
- 为什么JavaScript中的逻辑运算符是关联的
- 布尔表达式-与AND、OR逻辑运算符混淆以及它们的工作方式
- Javascript 逻辑运算符:多个 ||语法困境
- 我可以在文档中放入逻辑运算符吗.querySelectorAll?如果是,如何
- 如何使用逻辑运算符 JavaScript 或 jQuery
- angularJS-使用逻辑运算符内联的多个过滤器
- 具有逻辑运算符的复杂三元运算符
- Javascript逻辑运算符||将0读取为假值.有什么好办法解决这个问题吗
- 闭包模板中的逻辑运算符
- JS逻辑运算符
- 车把中的逻辑运算符.js {{#if}} 条件
- JS中逻辑运算符的问题
- 为什么在JS中使用NULL和逻辑运算符会抛出错误