标题听起来可能只是一个笑话在等着你(我知道,这是一场 SEO 灾难)。抱歉让您失望了。这篇文章实际上是关于 ES2021 中引入的 JavaScript 逻辑赋值运算符。请继续阅读,了解乔治和罗伯特与此有何关系……
逻辑赋值运算符本质上是布尔逻辑和赋值运算的混合。但这些组件的作用比人们最初想象的要多。
一方面,许多(如果不是大多数)开发人员可能没有意识到布尔逻辑与现代计算结构的交织程度有多深。它从计算机电路延伸到代码中的条件语句。
我们每天也使用等号,但常常没有经过太多思考。这个符号现在在数学和编码中都至关重要,它是在 16 世纪为数学目的而发明的。大约 400 年后,即 20 世纪 50 年代,它进入了计算机编程领域。
如果您对这个历史背景没有一点兴趣,请随意跳到“理解逻辑赋值运算符”部分。否则,请和我一起来一次短暂的时光之旅。
最早的逻辑研究归功于古希腊人,特别是亚里士多德,他通常被称为“逻辑之父”。他开发了一种形式化的逻辑系统,为逻辑运算符的使用奠定了基础。
我们今天所知的逻辑运算符的真正数学基础随着 19 世纪符号逻辑的出现而开始形成。它使用符号来表示逻辑形式和结构,从而允许更复杂和抽象的推理。
乔治·布尔,一位 19 世纪的英国数学家和逻辑学家,在他的开创性著作《思维法则》(1854 年)中,引入了逻辑的代数方法。这里的值可以是 true 或 false,并且可以对这些值执行操作,类似于代数运算。该系统包括基本的逻辑运算符:
在布尔工作的基础上,其他数学家和逻辑学家扩展了符号逻辑的范围和深度。 20 世纪中叶,它在新兴的计算机科学领域找到了一片新的沃土。事实证明,布尔逻辑的二进制性质非常适合计算机核心的数字电路,其中数据可以表示为一系列 0 和 1,并且逻辑运算符可以控制该数据的流动。
逻辑运算符成为编程语言的基本组成部分,允许在软件中构建复杂的计算逻辑和决策过程。如今,它们已成为几乎所有编程语言语法中不可或缺的一部分。
等号是由威尔士数学家 Robert Recorde 于 1557 年在他的著作《维特的磨刀石》中引入的。雷科德厌倦了在作品中反复书写“等于”,因此他选择了两条等长的平行线作为平等的符号。正如他所说,这是因为“noe 2 thynges can be moare equalle”。这是数学符号的重大发展,提供了一种简洁明了的方式来表达相等性。
在编程的早期,特别是使用机器代码和汇编语言,“赋值”的概念更多的是关于在寄存器和内存位置之间存储和移动数据。使用特定的操作码给出指令,指示机器执行这些操作。
随着高级编程语言的发展,需要一种更抽象和人类可读的方式来表示为变量赋值的操作。这导致许多语言采用等号作为赋值运算符,从 20 世纪 50 年代的 FORTRAN 开始。
使用 = 进行赋值造成了相等的数学含义的一些歧义。这导致引入不同的符号来阐明编程意图:
随着时间的推移,编程语言引入了各种形式的赋值运算符来有效地处理不同的操作,例如复合赋值运算符(=、-=等)以及最近在 JavaScript 中的逻辑赋值运算符。
逻辑赋值运算符是 JavaScript 中的语法糖,它将赋值 (=) 与逻辑(&&、||)或空合并 (??) 运算符结合起来。共有三种:
&&= 运算符是仅当变量当前包含真值时设置变量值的快捷方式。它在只有在特定条件成立时才应继续执行操作的情况下特别有用。
示例用例:功能切换
想象一个场景,其中某些功能只能为管理员启用:
const isAdmin = user.isAdmin(); let canAccessDashboard = isAdmin; canAccessDashboard &&= user.isAuthenticated(); console.log(canAccessDashboard); // true if user is authenticated, otherwise false
此代码片段确保仅当 isAdmin 和 user.isAuthenticated() 都为 true 时,canAccessDashboard 才为 true,从而有效地保护两个条件背后的功能。
||= 运算符允许您在变量当前持有假值(例如 null、undefined、0、false、“”)时为该变量赋值。这对于设置默认值非常有用。
示例用例:设置默认值
const userSettings = { theme: null, }; // Set default theme if none is specified userSettings.theme ||= "dark"; console.log(userSettings.theme); // Outputs 'dark'
此运算符非常适合初始化尚未设置的变量,确保您的应用程序使用合理的默认值,而不会覆盖 0 或 false 等潜在有意义的虚假值。
这 ??运算符,称为空合并运算符,是编程语言中相对较新的新增内容。从严格意义上讲,它不是逻辑赋值运算符,尽管 ES2021 规范将其分类为逻辑赋值运算符,因为它不是基于逻辑运算符。相反,它的开发与编程的实际需求更加紧密地联系在一起,特别是在以干净且可预测的方式处理 null 和未定义值方面。
当且仅当变量当前为 null 或未定义时,??= 运算符用于为变量赋值。这比 ||= 运算符更精确,后者还考虑其他虚假值。
示例用例:配置默认值
const config = { timeout: 0, }; config.timeout ??= 5000; // Set default timeout if not specified, i.e. undefined, or null console.log(config.timeout); // Outputs 0, preserving the explicitly set falsy value
此运算符在默认值应仅填充缺失值而不替换其他虚假但有效的设置(如 0)的配置和设置中特别有用。
使用逻辑赋值运算符而不是 if 或三元语句,可以减少需要编写的代码量,并且可以让其他开发人员更清楚地了解您的意图。与许多功能一样,关键是明智地使用这些运算符,尤其是在处理在代码上下文中有效的虚假值时。
JavaScript 中有更多的赋值运算符,例如左移赋值运算符 (
(封面图片位于 Freepik 上的 starline 上方)
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3