热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JavaScript运算符优先级与结合性解析

本文深入探讨了JavaScript中运算符的优先级与结合性的相关知识,通过具体实例解析了不同运算符在表达式中的执行顺序,帮助开发者更好地理解和使用JavaScript运算符。

深入探讨Javascript运算符的优先级与结合性

相关资源链接:MDN Web Docs - 运算符优先级,jingxian - 浅析JS运算符&&和||及其优先级

本文灵感来源于知乎的一个问题:关于Javascript中运算符优先级的探讨。

以下是知乎用户乐己生悲提供的一个示例代码及解析:

var a = 0;
console.log(
5 > 3 && 8 <4 + (a = 5)
);

在这个表达式“5 > 3 && 8 <4 + (a = 5)”中,首先根据运算符优先级规则,从左向右解析。“5 > 3”由于关系运算符“>”的优先级高于逻辑运算符“&&”,因此先计算这部分,结果为true。接下来处理“true && 8 <4 + (a = 5)”,因为“&&”左侧为true,所以继续计算右侧的表达式。根据优先级,先计算“8 <4 + (a = 5)”。这里,由于圆括号“()”的优先级最高,先执行“a = 5”,得到5。然后进行“4 + 5”的加法运算,结果为9,最后计算“8 <9”,结果为true。最终整个表达式的结果为“true && true”,即true。

作者:乐己生悲
链接:[知乎原文链接](https://www.zhihu.com/question...)
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

下面我将通过几个额外的表达式进一步探讨运算符优先级和结合性的影响。

5 > 3 && 8 <4 + (a = 5);

false && 8 <4 + 3 // 结果为false,因为AND操作符左侧的运算结果为false,触发短路效应,直接返回false。

5 > 2 || 2 > 4 && 3 > 2
// 结果为true,从左至右依次计算,5 > 2的结果为true,触发OR操作符的短路效应,直接返回OR左侧的值true,右侧表达式被忽略。

1 > 2 || 0 && 3 > 2
// 结果为0,从左至右计算,1 > 2的结果为false,因此计算“false || 0 && 3 > 2”。接着计算“0 && 3 > 2”,由于“>”的优先级高于“&&”,先计算“3 > 2”,结果为true。然后计算“0 && true”,结果为0。最后计算“false || 0”,结果为0。

var a = 5;
0 || 6 > a++ && 50 > (3 + 2) * 2
console.log(a); // 结果为6
// 从左至右计算,遇到OR操作符,左侧为0,继续计算右侧“6 > a++ && 50 > (3 + 2) * 2”。由于“a++”是后缀自增,先使用a的当前值5,然后自增。计算“6 > 5”结果为true,继续计算“50 > (3 + 2) * 2”。由于圆括号“()”优先级最高,先计算“3 + 2”,结果为5,再计算“5 * 2”,结果为10。最后计算“50 > 10”,结果为true。因此,整个表达式的结果为true,a的值在表达式执行完毕后变为6。

var x = 5;
var y = 3 + 2 * x++;
alert(y + " | " + x); // y的值为13,x的值为6
// 计算过程中遇到的运算符有“+”、“*”和后缀自增“++”。根据优先级,“*”的优先级高于“+”,因此先计算“2 * x”,结果为10(x的当前值为5)。然后计算“3 + 10”,结果为13,赋值给y。最后x自增,变为6。


推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 资源推荐 | TensorFlow官方中文教程助力英语非母语者学习
    来源:机器之心。本文详细介绍了TensorFlow官方提供的中文版教程和指南,帮助开发者更好地理解和应用这一强大的开源机器学习平台。 ... [详细]
  • Java 中 Writer flush()方法,示例 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
author-avatar
云在天涯无无边_737
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有