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 ; ⑶可以同时声明多个变量并赋值 ...
随机推荐
- CTFCrackTools在Windows下显示A Java Exception has occurred的解决方案
打CTF做密码学的人一定少不了用这个工具,CTFCrackTools,这个几乎可以号称密码学的神器,但是呢,最近博主遇到了一些麻烦事,每次打开的时候都是显示A Java Exception has o ...
- print与printf的区别
print与printf的区别 1,print 中不能使用%s ,%d 或%c: 2,print 自动换行,printf 没有自动换行. 纯粹做下笔记哈!很多东西不知道,也就只能这样了!
- bzoj:1187: [HNOI2007]神奇游乐园
Description 经历了一段艰辛的旅程后,主人公小P乘坐飞艇返回.在返回的途中,小P发现在漫无边际的沙漠中,有一块狭长的绿地特别显眼.往下仔细一看,才发现这是一个游乐场,专为旅途中疲惫的人设计. ...
- 【Java学习笔记之一】java关键字及作用
Java关键字及其作用 一. 总览: 访问控制 private protected public 类,方法和变量修饰符 abstract class extends final implements ...
- BZOJ3109: [cqoi2013]新数独
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3109 搜索一遍.读入注意一下.. #include<cstring> #inclu ...
- CSS中的定位与浮动
CSS中的定位与浮动 本文主要讲述CSS中的三种定位样式static.relative和absolute的区别以及浮动元素的特征. 定位样式 CSS中定位样式position的取值有三个,默认值:st ...
- BC高精确度函数使用。
bc是Binary Calculator的缩写.bc*函数的参数都是操作数加上一个可选的 [int scale],比如string bcadd(string $left_operand, string ...
- SMTP错误码建议解决方法
https://wenku.baidu.com/view/0af30e01e87101f69e3195b8.html SMTP 错误码 / 建议解决方法 错误总表 101 Cannot Open Co ...
- 阿里云邮件服务器怎么设置才能在QQ邮箱访问,互发邮件?
必须要在阿里云邮上打开IMAP和SMTP IMAP能够代发代收.在线更改.垃圾拦截,比POP3好: 记住打开的协议号: IMAP:143 带SSL:993 SMTP: 25 带SSL:465 前提是能 ...
- 基于Vue的小日历(支持按周切换)
基于Vue的日历小功能,可根据实际开发情况按每年.每月.每周.进行切换 <template> <div class="date"> <!-- 年份 ...