博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js 关于运算顺序的问题
阅读量:7111 次
发布时间:2019-06-28

本文共 1007 字,大约阅读时间需要 3 分钟。

先介绍涉及到的概念

表达式:js中的短语,解释器在遇到表达式时,会将短语进行计算,然后再参与到运算中,表达式即js中的短语。

j所有的s代码都是由操作符和表达式组成的,因此除了操作符,其他的都是js中的表达式。

如1 + 1 这段代码中,+是操作符,前面的1和后面的1都是表达式。

表达式的分类:

原始表达式:常量(如π)、变量、直接量(数字、字符串、正则表达式)、关键字

初始化表达式:初始化对象和初始化数组

函数定义表达式:

函数调用表达式:

属性访问表达式:

对象创建表达式:使用new操作符创建函数

优先级:

优先级由高至低顺序:属性访问、一元操作符、乘除、加减、比较(<,>等)、判断相等(==,===,!==,!=)、与、或、三目运算、赋值运算

总结:属性访问表达式拥有最高优先级,其次是以操作符(new也属于一元操作符),优先级最低的是赋值运算。

例子:

var a = 3;++a == 3;//false

上面的例子的结果是数值还是布尔类型,取决于运算的优先级,如果先进行判断a == 3,然后再执行++操作,那么结果是 a = 2,如果是先执行++运算,再判断a == 3,结果是false.

结和性:(优先级相同时看结合性)

分为左结合和右结合,

js中遵循右结合的有:一元操作符、三目运算、赋值运算,

其他所有都是遵循左结合的。

例子:

var a = 3;!a++;

上面的例子中有两个操作符,一个是!,另一个是++,这两个都是一元操作符,如果从左至右进行计算,那结果是1;但是一元操作符是遵循右结合的,也就是说这个语句会先进行a++运算,然后再对a进行取非运算,结果是false.

再来一个例子:

x = a ? b : c ? d : e ? f : g

我看到的时候是很懵的,虽然应该不会有人这么写,但是这种写法是可以存在的,所以我们也要知道是怎么执行的,三目运算也是右结合性的,所以上面的例子等价于:x = a ? b : (c ? d : (e ? f : g )) 

最后是运算顺序:

js中的表达式包含表达式时,运算顺序是从左至右。

var a = 1;b = a++ + a;

 

var  a = 1;b = a++ + ++a;

猜猜上面两个例子中执行后a和b分别等于什么

转载于:https://www.cnblogs.com/leraine/p/7610624.html

你可能感兴趣的文章
Mangos魔兽世界服务端初探(1)--游戏服务端主体结构与消息分发
查看>>
SonarQube svn 认证失败的解决办法
查看>>
C++string与VC++CString互转
查看>>
Ubuntu查找占用端口进程并删除
查看>>
Rgb to Yuv,Tuv to Rgb转换(C# emgucv)
查看>>
JSTL标签+EL表达式
查看>>
PHP中的java方式重载
查看>>
CSS3:RESET、标准注释、多屏幕尺寸兼容写法。
查看>>
小得瑟一下,记一下一个SQL语句
查看>>
uCLinux上UCD-SNMP Agent的实现
查看>>
在线时序图工具推荐
查看>>
改进的难度 产品经理
查看>>
Redis replication
查看>>
Android TextView 高度问题
查看>>
Android 热补丁动态修复框架小结
查看>>
轻量级消息队列
查看>>
osx分区合并命令行操作
查看>>
使用yii里面的module碰到的小问题
查看>>
JQuery Slider 实现时间刻度滑动条,用以编辑项目/起始时间(手动输入可自动更新到滑动条)...
查看>>
精确测量小信号的示波器及探头技术
查看>>