javascript - 为什么 JavaScript 的逻辑 AND (&&) 与 if 条件不一样?
问题描述
我从事 JS 开发已经有很长时间了,多年来我一直认为我可以使用逻辑 AND 来短路条件语句。事实上,我一直在使用条件渲染的 React 组件中执行此操作。但事实证明它并不像我一直期望的那样工作。问题是,为什么?
以下是节点 8.15.0 的示例:
> a = 0.0
0
> a && console.log(a)
0
> if(a) console.log(a)
undefined
> !!a && console.log(a)
false
具体来说,为什么不a && console.log(a)
一样if (a) console.log(a)
解决方案
if(a) ...
是一个声明。a && ...
是一个表达式。
此行为特定于控制台。如果一行计算为表达式,则输出结果,否则认为该行计算为undefined
.
a && ...
是短路。这意味着如果a
是假的,则表达式的计算结果为a
。如果a
为真,则表达式被评估为...
。
这不会影响两者在实际应用程序中而不是控制台中的使用方式。如果不使用评估的结果,则if
短路评估和短路评估的行为方式相同,即...
仅在条件为真时评估。
推荐阅读
- mysql - 如何在mysql中使用动态表名和动态列名编写选择查询
- javascript - 有效地使用节点获取,获取无效的 json 响应正文错误*仅*我第一次查询服务器时
- oracle - 入队资源使用百分比 108.65% 对数据库来说太高了
- android - MIUI 11 防止从前台服务启动(其他应用程序的)活动?
- python - numpy memmap 一次可以处理的最大进程数是多少?
- javascript - 正则表达式 - 匹配字符串中的标记
- python - 在 Matplotlib 中使用左右轴绘制条形图和线形图
- php - 如何使我的 CodeIgniter 控制器能够正确识别来自 FullCalendar4 的 ajax 调用?
- ios - SKPhysicsJoint 移除节点之间的连接线
- node.js - 为什么我的 React 应用程序不能处理指向其路由之一的链接?