”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 了解 JavaScript 中的短路:初学者指南

了解 JavaScript 中的短路:初学者指南

发布于2024-08-19
浏览:582

Understanding Short-Circuiting in JavaScript: A Beginner

当您第一次开始学习 JavaScript 时,您很快就会意识到编写代码不仅仅是让它运行。对于初学者来说,一个经常被忽视的强大概念是“短路”。它是 JavaScript 中逻辑运算的一个重要特性,可以使您的代码更加高效和可读。那么,短路到底是什么,它是如何工作的?

什么是短路?

短路发生在逻辑运算中,如果第一个操作数已经确定了运算的结果,则不会计算第二个操作数。简单来说,如果逻辑运算的结果可以由第一个值确定,JavaScript 甚至不会费心检查第二个值。

JavaScript 有两个支持短路的逻辑运算符:&& (AND) 和 || (或者)。

与 && (AND) 运算符短路

&& 运算符检查表达式两边是否都为 true。但是,如果第一个操作数为 false,则无需检查第二个操作数,因为无论如何结果都将为 false。

例子:

const isLoggedIn = false;
const hasAccess = isLoggedIn && someFunction();

console.log(hasAccess); // false

在上面的示例中,someFunction() 永远不会被调用,因为 isLoggedIn 为 false。 JavaScript 无需计算第二部分就知道整个表达式为假。

与 || 短路(或)运算符

||运算符检查是否至少有一侧为真。如果第一个操作数为 true,则整个表达式为 true,因此不计算第二个操作数。

例子:

const userRole = 'admin';
const role = userRole || 'guest';

console.log(role); // 'admin'

这里,userRole 已经是 true('admin'),所以 JavaScript 甚至不考虑'guest'。角色的值为“admin”。

为什么短路有用?

短路不仅仅是一个巧妙的技巧;它也是一种技巧。它是编写更简洁、更高效的代码的实用工具。以下是您可以使用它的几种方法:

1。默认值:

const name = inputName || 'Guest';

如果 inputName 为空或 null,名称将默认为“Guest”。

2.保护函数调用:

user && user.sendMessage('Hello!');

这确保仅当用户存在时才调用 sendMessage。

3.惰性求值:

const result = complexCondition && performExpensiveOperation();

const result = complexCondition && performExpensiveOperation();

如果complexCondition为假,则跳过昂贵的操作,节省资源。

总结

短路可能看起来只是一个小细节,但理解它可以带来更高效、更易读的代码。这是您在 JavaScript 中经常遇到的一个概念,因此尽早熟悉它将使您成为一名更强大的开发人员。尝试在您自己的项目中尝试它 - 您可能会发现它比您想象的更方便!

请记住,短路的神奇之处在于它的简单性。它让 JavaScript 完成足够的工作来完成工作,不多也不少。作为一名开发人员,学习利用这种简单性将对您大有裨益。快乐编码!

版本声明 本文转载于:https://dev.to/victorusese/understanding-short-circuiting-in-javascript-a-beginners-guide-2mk4?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • PHP阵列键值异常:了解07和08的好奇情况
    PHP阵列键值异常:了解07和08的好奇情况
    PHP数组键值问题,使用07&08 在给定数月的数组中,键值07和08呈现令人困惑的行为时,就会出现一个不寻常的问题。运行print_r($月)返回意外结果:键“ 07”丢失,而键“ 08”分配给了9月的值。此问题源于PHP对领先零的解释。当一个数字带有0(例如07或08)的前缀时,PHP将其...
    编程 发布于2025-06-10
  • Java数组中元素位置查找技巧
    Java数组中元素位置查找技巧
    在Java数组中检索元素的位置 利用Java的反射API将数组转换为列表中,允许您使用indexof方法。 (primitives)(链接到Mishax的解决方案) 用于排序阵列的数组此方法此方法返回元素的索引,如果发现了元素的索引,或一个负值,指示应放置元素的插入点。
    编程 发布于2025-06-10
  • 表单刷新后如何防止重复提交?
    表单刷新后如何防止重复提交?
    在Web开发中预防重复提交 在表格提交后刷新页面时,遇到重复提交的问题是常见的。要解决这个问题,请考虑以下方法: 想象一下具有这样的代码段,看起来像这样的代码段:)){ //数据库操作... 回声“操作完成”; 死(); } ?> ...
    编程 发布于2025-06-10
  • Python高效去除文本中HTML标签方法
    Python高效去除文本中HTML标签方法
    在Python中剥离HTML标签,以获取原始的文本表示Achieving Text-Only Extraction with Python's MLStripperTo streamline the stripping process, the Python standard librar...
    编程 发布于2025-06-10
  • 图片在Chrome中为何仍有边框?`border: none;`无效解决方案
    图片在Chrome中为何仍有边框?`border: none;`无效解决方案
    在chrome 在使用Chrome and IE9中的图像时遇到的一个频繁的问题是围绕图像的持续薄薄边框,尽管指定了图像,尽管指定了;和“边境:无;”在CSS中。要解决此问题,请考虑以下方法: Chrome具有忽略“ border:none; none;”的已知错误,风格。要解决此问题,请使用以下...
    编程 发布于2025-06-10
  • Go语言如何动态发现导出包类型?
    Go语言如何动态发现导出包类型?
    与反射软件包中的有限类型的发现能力相反,本文探索了替代方法,探索了在Runruntime。go import( “ FMT” “去/进口商” ) func main(){ pkg,err:= incorter.default()。导入(“ time”) 如果err...
    编程 发布于2025-06-10
  • 在C#中如何高效重复字符串字符用于缩进?
    在C#中如何高效重复字符串字符用于缩进?
    在基于项目的深度下固定字符串时,重复一个字符串以进行凹痕,很方便有效地有一种有效的方法来返回字符串重复指定的次数的字符串。使用指定的次数。 constructor 这将返回字符串“ -----”。 字符串凹痕= new String(' - ',depth); console.Wr...
    编程 发布于2025-06-10
  • 在Ubuntu/linux上安装mysql-python时,如何修复\“ mysql_config \”错误?
    在Ubuntu/linux上安装mysql-python时,如何修复\“ mysql_config \”错误?
    mysql-python安装错误:“ mysql_config找不到”“ 由于缺少MySQL开发库而出现此错误。解决此问题,建议在Ubuntu上使用该分发的存储库。使用以下命令安装Python-MysqldB: sudo apt-get安装python-mysqldb sudo pip in...
    编程 发布于2025-06-10
  • Python中何时用"try"而非"if"检测变量值?
    Python中何时用"try"而非"if"检测变量值?
    使用“ try“ vs.” if”来测试python 在python中的变量值,在某些情况下,您可能需要在处理之前检查变量是否具有值。在使用“如果”或“ try”构建体之间决定。“ if” constructs result = function() 如果结果: 对于结果: ...
    编程 发布于2025-06-10
  • 为什么尽管有效代码,为什么在PHP中捕获输入?
    为什么尽管有效代码,为什么在PHP中捕获输入?
    在php ;?>" method="post">The intention is to capture the input from the text box and display it when the submit button is clicked.但是,输出...
    编程 发布于2025-06-10
  • 如何在无序集合中为元组实现通用哈希功能?
    如何在无序集合中为元组实现通用哈希功能?
    在未订购的集合中的元素要纠正此问题,一种方法是手动为特定元组类型定义哈希函数,例如: template template template 。 struct std :: hash { size_t operator()(std :: tuple const&tuple)const {...
    编程 发布于2025-06-10
  • 如何使用FormData()处理多个文件上传?
    如何使用FormData()处理多个文件上传?
    )处理多个文件输入时,通常需要处理多个文件上传时,通常是必要的。 The fd.append("fileToUpload[]", files[x]); method can be used for this purpose, allowing you to send multi...
    编程 发布于2025-06-10
  • C++20 Consteval函数中模板参数能否依赖于函数参数?
    C++20 Consteval函数中模板参数能否依赖于函数参数?
    [ consteval函数和模板参数依赖于函数参数在C 17中,模板参数不能依赖一个函数参数,因为编译器仍然需要对非contexexpr futcoriations contim at contexpr function进行评估。 compile time。 C 20引入恒定函数,必须在编译时进行...
    编程 发布于2025-06-10
  • Java是否允许多种返回类型:仔细研究通用方法?
    Java是否允许多种返回类型:仔细研究通用方法?
    在Java中的多个返回类型:一种误解类型:在Java编程中揭示,在Java编程中,Peculiar方法签名可能会出现,可能会出现,使开发人员陷入困境,使开发人员陷入困境。 getResult(string s); ,其中foo是自定义类。该方法声明似乎拥有两种返回类型:列表和E。但这确实是如此吗...
    编程 发布于2025-06-10
  • 如何在GO编译器中自定义编译优化?
    如何在GO编译器中自定义编译优化?
    在GO编译器中自定义编译优化 GO中的默认编译过程遵循特定的优化策略。 However, users may need to adjust these optimizations for specific requirements.Optimization Control in Go Compi...
    编程 发布于2025-06-10

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3