i=i++;a=a++;后置递增递减运算符详解
关于这段代码,如果有被迷惑过的同学,可能会很熟悉
let i = 0;
i = i++;
console.log(i);
结果输出为:0
关于 i=i++ 或者a=a++ 的问题,在百度上一搜一大堆,很多文章会直接通过汇编来看内存中是如何操作,还有一些是说这个问题,其实在早年是没有直接定义的,有些非常的老的编译器,可能会输出1,但是现在的编译器几乎不可能输出1,都是一样的结果为 0。这个问题早就不存在歧义了,但是在开发中几乎不会用到复杂的后置递增递减运算符。
对于网上文章的剖解,大部分都是长编大论,没有一个具体的总结,而且涉及的知识也非常多,导致像我这种小菜鸡,看的灰常麻木。
所以根据他们的文章我得出了一个非常短暂的总结:
前置递增或者递减:先递增再复制,递减同理。
后置递增或者递减:先复制再递增,递减同理。
重点:复制 和 递增或递减 这个两个步骤虽然执行顺序会不一样,但是执行步骤是相连的,不会被分开执行。
还有一点需要注意:
请看代码
let a = 1;
console.log(a++);
console.log(a);
第二行代码 a++ 运算符返回的值是复制的副本,并不是原数据本身,也就是说执行到a++的时候就已经递增了,只不过递增的是原数据的值。而第三行代码返回的是原数据本身。
要把递增递减运算符看成一个整体,所以递增递减运算符的执行步骤是不可分开的(多哔了一句)。
前置递增递减运算符返回的值一样是复制的副本,并不是数据本身,只不过前置递增是先递增再复制,所以副本和原数据的值是一样的,不会造成疑惑。
语句或者表达式操作的是递增或者递减运算符的副本,并不是原数据。
看视频
看完总结,你可能会觉的,这啥玩意啊!我知道你很急,但是你先别急,看视频讲解。
视频主要是围绕着后置递增或递增来讲解的,因为前置递增或递减是没有异议的,无需说明。
请点击视频链接
ppt动画
测试代码
资料在百度网盘中,如果要提取码,那么就是:1111
38号:我为这个结论负责
参考资料:1、2、3、4、
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
