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 ; ⑶可以同时声明多个变量并赋值 ...
随机推荐
- SpringBoot(四)之thymeleaf的使用
这篇文章将更加全面详细的介绍thymeleaf的使用.thymeleaf 是新一代的模板引擎,在spring4.0中推荐使用thymeleaf来做前端模版引擎. thymeleaf介绍 简单说, Th ...
- bzoj:2018 [Usaco2009 Nov]农场技艺大赛
Description Input 第1行:10个空格分开的整数: N, a, b, c, d, e, f, g, h, M Output 第1行:满足总重量最轻,且用度之和最大的N头奶牛的总体重模M ...
- [51nod1407]与与与与
有n个整数,问从他们中取出若干个数字相与之后结果是0的有多少组. 答案比较大,输出对于 1,000,000,007 (1e9+7)取模后的结果. Input 第一行输入一个整数n.(1<=n&l ...
- 斐波那契数列 Library
http://acm.tju.edu.cn/toj/showp3267.html3267. Library Time Limit: 1.0 Seconds Memory Limit: 6553 ...
- Spring学习日志之Glance
Spring的本质 Spring最根本的意图只有一个:简化Java开发 Spring的核心主要有两个: 依赖注入 AOP Spring容器 Spring容器负责对对象进行创建,装配,配置并管理它们的整 ...
- 启动时候报错由于没有扫包 error creating bean with name
<!-- 扫描包,加载service实现类 --> <context:component-scan base-package="com.taotao.search.serv ...
- mysql 恢复数据
前提:保存了需要恢复数据库的文件 .frm 和 .ibd 文件 条件:InnoDB 类型的 恢复表结构1.新建一个数据库--新建一个表,表名和列数和需要恢复数据库相同2.停止mysql服务器 serv ...
- MLlib--GBDT算法
转载请标明出处http://www.cnblogs.com/haozhengfei/p/8b9cb1875288d9f6cfc2f5a9b2f10eac.html GBDT算法 江湖传言:GBDT算法 ...
- 如何给网站添加CNZZ站长统计功能代码的常用办法
前几天有个客户来问小编怎么给网站添加上CNZZ站长统计工具,其实这个很简单,只要把cnzz免费代码复制到我们的footer文件就行.今天小编正好有空就来分享一下具体的操作过程. 首先要想获得这个免费的 ...
- Apache、IIS、Nginx等绝大多数web服务器,都不允许静态文件响应POST请求,否则会返回“HTTP/1.1 405 Method not allowed”错误。
例1:用Linux下的curl命令发送POST请求给Apache服务器上的HTML静态页 [root@new-host ~]# curl -d 1=1 http://www.sohu.com/inde ...