JavaScript 基本语法 -- 运算符的优先级
在所有的运算里,都是有运算顺序的。小时候学四则运算的时候,我们都知道这么一个规则:先乘除后加减,有括号要先算括号!
同样的,在JavaScript里面,运算符也是有相应的优先级的。其优先级如下表所示,前面的优先级高于后面的
| 运算符 | 操作 |
| ++ | 自增(注意前后的区别) |
| -- | 自减(注意前后的区别) |
| - | 求反(针对数字) |
| + | 转换成数字 |
| ~ | 按位求反 |
| ! | 逻辑非 |
| delete, typeof, void | 删除属性,检查数据类型,返回undefined的值 |
| *, /, % | 乘,除,求余 |
| +, - | 加,减 |
| + | 字符串连接 |
| <<, >>, >>> | 左移位,有符号的右移位,无符号的右移位 |
| <, <=, >, >= | 比较大小,先比数字,后比字母 |
| == | 判断是否相等 |
| != | 判断是否不等 |
| === | 判断是否恒等 |
| !== | 判断是否不恒等 |
| & | 按位与 |
| ^ | 按位异或 |
| | | 按位或 |
| && | 逻辑与 |
| || | 逻辑或 |
| ?: | 条件运算符 |
| = | 赋值运算符 |
| op= | 运算且赋值 |
下面举个栗子
var result = 0;
var a = 10;
var b = 20;
var i = 2; result = a > b ? a + ( b * i++ ) : a + ( b / i--) console.log(result); //
console.log(i); //
解释:因为 a>b 并不成立,所以选择第二个表达式 “a + ( b / i-- )”,10 + ( 20 / 2 ) 结果为 20(与此同时,i 进行自减,结果为 1),然后执行赋值语句,result 为 20。
PS:
当自增++(自减--)在操作数前面,操作数进行自增1(自减1)计算,并且返回计算后的值;
当自增++(自减--)在操作数后面,操作数进行自增1(自减1)计算,并且返回计算前的值;
var i = 1;
var j = ++i; var m = 1;
var n = m++; console.log(i); //
console.log(j); //
console.log(m); //
console.log(n); //
扩展:有个蛋疼的面试题如下
var a = {n: 1};
var b = a;
a.x = a = {n: 2};
console.log(a.x); // undefined
console.log(b.x); // {n: 2}
// a => {n: 2}
// b => {
// n: 1,
// x: {n: 2 }
// }
解析:
虽然赋值运算符是从右到左计算,但是这里也有一个很重要的考点:运算符的优先级
.点号运算 优于 =赋值运算,因此 a.x = a = {n: 2} 可以理解为:
1. 声明a对象中的x属性,而此时b和a同时指向对象{n: 1, x: undefined},即同时拥有未赋值的x
2. 从右至左开始赋值
1). 对 a对象 赋值 a = {n: 2},此时变量名a改变指向 到 新对象{n: 2}
2). 对 a.x(可以理解为b.x,就是说a.x已经确定了指向,因此不会受到第1)步的影响) 属性赋值{n: 2},此时对象b -> {n:1, x:{n:2}}
JavaScript 基本语法 -- 运算符的优先级的更多相关文章
- javascript中运算符的优先级
运算符优先级 JavaScript中的运算符优先级是一套规则.该规则在计算表达式时控制运算符执行的顺序.具有较高优先级的运算符先于较低优先级的运算符执行.例如,乘法的执行先于加法. 下表按从最高到最低 ...
- (转)JavaScript中的运算符优先级
JavaScript中的运算符优先级是一套规则.该规则在计算表达式时控制运算符执行的顺序.具有较高优先级的运算符先于较低优先级的运算符执行.例如,乘法的执行先于加法. 下表按从最高到最低的优先级列出J ...
- javascript运算符的优先级
最基木的运算符优先级就是所谓的“先乘除,后加减”.对于优先顺序处于同一层次上的运算符,按照从左到右出现的顺序计算.下面给出javascript定义的所有运算符的优先级.运算符 优先顺序成员选择.括号. ...
- JavaScript中涉及得运算符以及运算符的优先级
在js中主要有三种运算符:算术运算符,逻辑与比较运算符,位运算符.在着三种运算符中,最常见的应该是算术与比较运算符,位运算符比较少见一些 *说到了运算符,就不得不说运算符的优先级.下面我来列一下这些运 ...
- (4)javascript的运算符以及运算符的优先级
运算符的使用方法 在javascript的程序中要完成各种各样的运算,是离不开运算符的. 在javascript中,按运算符类型可以分为 ...
- python基础语法(运算符及优先级)
python基础语法(运算符及优先级) python语言支持的运算符类型 算数运算符 假设变量a为10,变量b为21 算数符 描述 实例 + 加-两个对象相加 a+b结果31 - 减-得到一个负数或者 ...
- 031 01 Android 零基础入门 01 Java基础语法 03 Java运算符 11 运算符的优先级
031 01 Android 零基础入门 01 Java基础语法 03 Java运算符 11 运算符的优先级 本文知识点:Java中运算符的优先级 运算符的优先级问题 前面学习了很多的运算符,如果这些 ...
- C语言语法之运算符及优先级
注:该内容整理自以下链接. http://blog.csdn.net/huangblog/article/details/8271791 表:C语言运算符及优先级 优先级 运算符 名称或含义 使用形式 ...
- JavaScript 运算符的优先级
㈠逗号(,)运算符 ⑴使用 , 可以分割多个语句,一般可以在声明多个变量时使用 , : ⑵使用 , 运算符同时声明多个变量 // var a , b , c ; ⑶可以同时声明多个变量并赋值 ...
随机推荐
- CodeForces731-C.Socks-并查集
C. Socks time limit per test 2 seconds memory limit per test 256 megabytes input standard input outp ...
- 2017ecjtu-summer training #4 UESTC 1584
此题链接 http://acm.uestc.edu.cn/#/problem/show/1584 此题和hdu1541几乎完全一样,我们要先对坐标排序,再进行操作. hdu1541题解 http:// ...
- Spring学习日志之Glance
Spring的本质 Spring最根本的意图只有一个:简化Java开发 Spring的核心主要有两个: 依赖注入 AOP Spring容器 Spring容器负责对对象进行创建,装配,配置并管理它们的整 ...
- RAID 详解
一.什么是RAID 磁盘阵列全名是『Redundant Arrays of Inexpensive Disks, RAID 』,英翻中的意思是:容错式廉价磁盘阵列. RAID 可以透过一个技术(软件或 ...
- Xtrabackup实现数据的备份与恢复
Xtrabackup介绍 Xtrabackup是由percona开源的免费数据库热备份软件,它能对InnoDB数据库和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同样需要加表锁): ...
- Eclipse集成Tomcat的步骤,我已测试N次都是成功的
本文转自:https://www.cnblogs.com/weixing/p/3229983.html#undefined 使用Eclipse开发B/S结构Web应用时,必须使用Web应用服务器,常见 ...
- 制作ssh互信的docker镜像
Dockerfile FROM ubuntu:16.04 # package RUN apt-get update; apt-get -y install ssh COPY ssh_config /e ...
- 记录idea maven项目打包部署web项目mapper扫描失败
最开始以为这里出了问题,后来加上以后还是不能把mapper.xml打包进去 这是报的异常信息 Mybatis启动老是报绑定错误(找不到Mapper对应的 SQL配置),经过一番Google未能解决问题 ...
- C#进行CAD二次开发环境配置
最近被公司分配到了做CAD二次开发.也是初次接触这方面的东西,其实是有些无从下手的感觉.因为公司这边也没有人有时间带我,只能是自己看书,然后再写一些Demo,再结合实际的应用来一点点的学习.废话不多说 ...
- asp.net -mvc框架复习(11)-基于三层架构与MVC实现完整的用户登录
一.先从M部分写起(Modles\DAL\BLL) 1.Modles 实体类:上次实体类已经搞定. 2.DAL 数据访问类类 (1)通用数据数据访问类: A: 先编写数据连接字符串,写到网站根目录W ...