我们难免会遇到要在js中拼串的同时对某变量进行自增或自减并作为参数拼接去的操作,所以在这里简单的讨论一下在这种场景下的变量自增和自减。
####完整测试代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
</body>
<script type="text/javascript" src="jquery-3.0.0.min.js"></script>
<script type="text/javascript">
$(function () {
var i = 1;
$("body").append("<h3>a、i=1;i++=" + i++ + ";</h3>");
i = 1;
$("body").append("<h3>b、i=1;++i=" + ++i + ";</h3>");
i = 1;
$("body").append("<h3>c、i=1;i--=" + i-- + ";</h3>");
i = 1;
$("body").append("<h3>d、i=1;--i=" + --i + ";</h3>");
i = 1;
$("body").append("<h3>e、i=1;i+1=" + i + 1 + ";</h3>");
i = 1;
$("body").append("<h3>f、i=1;(i+1)=" + (i + 1) + ";</h3>");
});
</script>
</html>
####测试代码运行结果
a、i=1;i++=1;
b、i=1;++i=2;
c、i=1;i--=1;
d、i=1;--i=0;
e、i=1;i+1=11;
f、i=1;(i+1)=2;
####总结
以前我一直使用的是(i+1)/(i-1)来完成此类操作,鉴于此方法是代码相对最多、最笨和最不狂拽酷炫叼炸天的,所以一直想换一种better的方法,从上面的测试结果来看++i/–i无疑是符合我的需求的,而i++和i–却差了那么一丢丢,因为这里也涉及到i++和++i的一些区别:
- i++:先赋值再自加,先在i所在的表达式中使用i的当前值,后让i加1;
- ++i:先自加再赋值;让i先加1,然后在i所在的表达式中使用i的新值;
从上面不难看出这些自增减表达式(i++、++i、i-–、–-i)含义蹊跷,非常容易弄错。它们把读和写这两种完全不同的操作,混淆缠绕在一起,把语义搞得乌七八糟,而含有它们的表达式,结果却可能取决于求值顺序。但是需要指出的是自增减表达式在两种情况下还是可以安全的使用的。一种是在for循环的update部分,比如for(int i = 0; i < 5; i++)。另一种情况是写成单独的一行,比如i++;。这两种情况是完全没有歧义的,所以你可以放心的使用,而你需要避免的是其它的情况,比如用在复杂的表达式里面。
基于以上的各种原因,我还是选择(i+1)/(i-1)这种方式来实现功能,可能它是最笨,但同时它也是最聪明的,every body都能明白!