js i++ 与 ++i 的区别
转载:http://blog.csdn.net/hjb2722404/article/details/50423804
在javascript中,我们常常搞不懂i++与++i的区别,今天我们就来简单说一下。
i++的例子:
var i=1;
console.log(i); // 输出1 var a=i++;
console.log(i); //输出2
console.log(a); //输出1
++i的例子:
var i=1;
console.log(i); var a=++i;
console.log(i); //输出2
console.log(a); //输出2
解释
我们通过两个例子,可以看出其中不同,当使用i++赋值给a后,a的值为1,而使用++i赋值给a后,a的值为2,而两例中i最终都为2
可见:
* 使用i++时,i先将自身的值赋值给变量a,然后再自增1
* 使用++i时,i先将自身的值自增1,再将自增后的值赋值给变量a
原理:
运算符优先级
- 我们知道,++作为后置递增时,优先级为16,而作为前置递增时,优先级为15
- =作为赋值运算符时,优先级为3
- 所以,++会优先于=而执行
++运算符前置与后置的区别
我们看看MDN上对该运算符的说明:
If used postfix, with operator after operand (for example, x++), then it returns the value before incrementing.
If used prefix with operator before operand (for example, ++x), then it returns the value after incrementing.
简单翻译:
如果该运算符作为后置操作符,则返回它递增之前的值;
如果该运算符作为前置操作符,则返回它递增之后的值
所以,我们就知道, ++运算符会返回一个值,如果前置,则返回操作对象递增之后的值,如果后置,则返回操作对象递增之前的值。
当var a = i++时,实际上做了如下操作
i=1
j=i;
i=i+1;
a=j;
而var a = ++i时,实际上做了如下操作
i=1
j=i+1;
i=i+1
a=j;
拓展
设i=1,a = (i++)+(i++)+(++i)
那么a的值是?
我们可以将该运算简化为:
var i =1;
b=function(){
var j;
j=i;
i=i+1; //
return j; //
};
c=function(){
var m;
m=i; //
i=i+1; //
retrun m; //
};
d=function(){
var n;
n=i+1; //
i=i+1; //
return n; //
}
var a = b + c +d;
a=1+2+4=7;
所以当i=1,a = (i++)+(i++)+(++i)=1+2+4=7
js i++ 与 ++i 的区别的更多相关文章
- js中== 和===中的区别
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- js onkeypress与onkeydown 事件区别详细说明
keypress只适用于有字符输入的按键 而keyup/keydown包含了Ctrl, Shift之类的情况 Firefox在处理onKeyDown/onKeyPress事件时存在漏洞,恶意网页可能利 ...
- js中const,var,let区别(转载)
js中const,var,let区别 来源:https://www.cnblogs.com/zzsdream/p/6372729.html 今天第一次遇到const定义的变量,查阅了相关资料整理了这篇 ...
- js 创建数组方法以及区别
示例代码: <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF ...
- js中const,var,let区别
今天第一次遇到const定义的变量,查阅了相关资料整理了这篇文章.主要内容是:js中三种定义变量的方式const, var, let的区别. 1.const定义的变量不可以修改,而且必须初始化. co ...
- JS之apply,call,bind区别
为了加深对基础知识的理解,今天再复习下js中的apply,call,bind的区别和用法.整理笔记的过程也是一个再次学习的过程. apply和call js中的调用apply和call方法可以改变某个 ...
- js call与apply的区别-Tom
.apply和.call方法是在函数原型中定义的两个方法(因此所有的函数都可以访问它)允许去手动设置函数调用的this值,他们用接受 的第一个参数作为this值,this 在调用的作用域中使用.这两个 ...
- js 对象与函数的区别
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- JS中NULL和undifined区别及NULL的作用
1.博客地址:http://www.cnblogs.com/eastday/archive/2010/03/03/1677324.html 2.参考地址2:https://www.zhihu.com/ ...
- jquery data方法取值与js attr取值的区别
<a data-v="3"></a> jquery data方法的运行机制: 第一次查找dom,使用attributes获取到dom节点值,并将其值存到缓存 ...
随机推荐
- 如何快速掌握man手册的使用
man手册内容详细,解释到位,因为好多都是软件的原创者自己写的说明文档,当然是第一手的资料.但是,有几个难点需要克服: 1.英文不易阅读,通常我是先在书上或者网络上找到某个命令的详细说明和解释,然后在 ...
- ENGINE_API CXNoTouch
/************************************************************************/ //屏蔽消息面板 //优先级默认为 TP_BOTT ...
- sass 的使用
普通变量 ? 1 $fontSize:12px; 默认变量 ? 1 $fontSize:12px; !default; 变量覆盖:只需要在默认变量之前重新声明下变量即可 ? 1 2 $fontSize ...
- jdom 插入 修改 删除
创建XML文档 XML文件是一种典型的树形文件,每个文档元素都是一个document元素的子节点.而每个子元素都是一个Element对象,对象可以向下包含. 1 因此我们可以通过先创建元素再将元素添加 ...
- 存储管理器实验——SDRAM
序言:2440有nand和nor两种启动方式,在裸机部分,都是使用的nand启动. 现在,我们想在nand flash启动的时候,通过SRAM访问存储在外设SDRAM中的程序. nand启动,先把前4 ...
- 5分钟用Spring4 搭建一个REST WebService(转)
章节目录 前置技能 新建项目,配置依赖文件 编写Model和Controller 启动服务&访问 但是 其他 前置技能 ① 使用maven来管理java项目 这个技能必须点一级,以便快速配置项 ...
- 转:PHP获取浏览器类型及版本号
function getBrowser(){ $agent=$_SERVER["HTTP_USER_AGENT"]; if(strpos($agent,'MSIE')!==fals ...
- ptxdist for sama5d3
http://www.vahanus.net/~csc/scm/ptxdist-at91sama5d3-xpld.git/
- 机器学习:如何通过Python入门机器学习
我们都知道机器学习是一门综合性极强的研究课题,对数学知识要求很高.因此,对于非学术研究专业的程序员,如果希望能入门机器学习,最好的方向还是从实践触发. 我了解到Python的生态对入门机器学习很有帮助 ...
- 组建一台计算机5_硬件5 多位存储器&累加器&初始汇编(1)
转载请遵循GNU开源宣言.Copyleft ! <2013>, <http://www.cnblogs.com/sciencefans from buaa 华罗庚班> 阅读此文 ...