在所有的运算里,都是有运算顺序的。小时候学四则运算的时候,我们都知道这么一个规则:先乘除后加减,有括号要先算括号!

同样的,在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 基本语法 -- 运算符的优先级的更多相关文章

  1. javascript中运算符的优先级

    运算符优先级 JavaScript中的运算符优先级是一套规则.该规则在计算表达式时控制运算符执行的顺序.具有较高优先级的运算符先于较低优先级的运算符执行.例如,乘法的执行先于加法. 下表按从最高到最低 ...

  2. (转)JavaScript中的运算符优先级

    JavaScript中的运算符优先级是一套规则.该规则在计算表达式时控制运算符执行的顺序.具有较高优先级的运算符先于较低优先级的运算符执行.例如,乘法的执行先于加法. 下表按从最高到最低的优先级列出J ...

  3. javascript运算符的优先级

    最基木的运算符优先级就是所谓的“先乘除,后加减”.对于优先顺序处于同一层次上的运算符,按照从左到右出现的顺序计算.下面给出javascript定义的所有运算符的优先级.运算符 优先顺序成员选择.括号. ...

  4. JavaScript中涉及得运算符以及运算符的优先级

    在js中主要有三种运算符:算术运算符,逻辑与比较运算符,位运算符.在着三种运算符中,最常见的应该是算术与比较运算符,位运算符比较少见一些 *说到了运算符,就不得不说运算符的优先级.下面我来列一下这些运 ...

  5. (4)javascript的运算符以及运算符的优先级

                                    运算符的使用方法 在javascript的程序中要完成各种各样的运算,是离不开运算符的. 在javascript中,按运算符类型可以分为 ...

  6. python基础语法(运算符及优先级)

    python基础语法(运算符及优先级) python语言支持的运算符类型 算数运算符 假设变量a为10,变量b为21 算数符 描述 实例 + 加-两个对象相加 a+b结果31 - 减-得到一个负数或者 ...

  7. 031 01 Android 零基础入门 01 Java基础语法 03 Java运算符 11 运算符的优先级

    031 01 Android 零基础入门 01 Java基础语法 03 Java运算符 11 运算符的优先级 本文知识点:Java中运算符的优先级 运算符的优先级问题 前面学习了很多的运算符,如果这些 ...

  8. C语言语法之运算符及优先级

    注:该内容整理自以下链接. http://blog.csdn.net/huangblog/article/details/8271791 表:C语言运算符及优先级 优先级 运算符 名称或含义 使用形式 ...

  9. JavaScript 运算符的优先级

    ㈠逗号(,)运算符 ⑴使用 , 可以分割多个语句,一般可以在声明多个变量时使用 , : ⑵使用 , 运算符同时声明多个变量    // var a , b , c ; ⑶可以同时声明多个变量并赋值   ...

随机推荐

  1. 【Html5】-- 塔台管制

    想做这个游戏已久,今天终于初步完成,先解释下,这是一个模拟机场塔台管制指挥的游戏,飞机从不同的方向飞入管制空域,有不同的目的地,飞机名称最后一个字母表示飞机要到达的目的地,分ABCD和R.A-D表示四 ...

  2. msfvenom向apk注入payload

    首先安装apt-get install apkinjector 这个东西,msfvenom重新组装apk的时候会自动调用 msfvenom -x /路径/apk android/meterpreter ...

  3. Redux 介绍

    本文主要是对 Redux 官方文档 的梳理以及自身对 Redux 的理解. 单页面应用的痛点 对于复杂的单页面应用,状态(state)管理非常重要.state 可能包括:服务端的响应数据.本地对响应数 ...

  4. python笔记二(mysql数据库操作)

    python2.x使用MySQLdb python3.x使用pymysql代替MySQLdb 不过我使用的是python3.5,MySQLdb还是可以在python3.5使用的. #!/usr/bin ...

  5. 数值积分之Simpson公式与梯形公式

    Simpson(辛普森)公式和梯形公式是求数值积分中很重要的两个公式,可以帮助我们使用计算机求解数值积分,而在使用过程中也有多种方式,比如复合公式和变步长公式.这里分别给出其简单实现(C++版): 1 ...

  6. c++(排序二叉树)

    前面我们讲过双向链表的数据结构.每一个循环节点有两个指针,一个指向前面一个节点,一个指向后继节点,这样所有的节点像一颗颗珍珠一样被一根线穿在了一起.然而今天我们讨论的数据结构却有一点不同,它有三个节点 ...

  7. Linux6.X图形界面如何打开终端以及如何将终端加入右键

    今天刚安装了一个centos 6.9图形界面的系统,安装完成后,鼠标右击没有打开终端的按钮,在网上查了一些资料,搞明白了,分享给大家. 在左上角菜单[Applications]--->[Syst ...

  8. Android studio启动后卡在refreshing gradle project(包解决)

    这个问题几乎每个刚使用Android studio的同学都会碰到过,网上有各式各样的方法,有的说使用本地gradle,我试过多次,每次启动android studio时还是会检查更新,所以根本上解决的 ...

  9. JS中const、var 和let的区别

    今天第一次遇到const定义的变量,查阅了相关资料整理了这篇文章.主要内容是:js中三种定义变量的方式const, var, let的区别. 1.const定义的变量不可以修改,而且必须初始化. 1 ...

  10. [国嵌笔记][008-009][远程登录Linux]

    [国嵌笔记][008][远程登录Linux] 1.windows与Linux能够相互ping通 2.关闭Linux防火墙 /etc/init.d/iptables stop 3.通过ssh(字符界面) ...