主题:  i=i++ i==i++

专业设计

职务:普通成员
等级:2
金币:2.0
发贴:657
#12002/1/28 15:32:05
i=i++ i==i++
我不明白他门的区别



金山羊

职务:普通成员
等级:4
金币:10.0
发贴:827
#22002/1/28 16:34:12
ramon在上个帖子中说
引用:
i=i++ i==i++
我不明白他门的区别


= 是赋值
== 是判断


5d.cn
FLASHDEP
TECHNOLOGY SUPPORT
JAVA/ACTIONSCRIPT/javascript
CFML/JSP/COLDFUSION/FLASH REMOTING
JRUN/COLDFUSIONMX
FLASH/DREAMWEARER

janlay

职务:管理员
等级:7
金币:28.0
发贴:7244
#32002/1/28 23:16:51
前一个导致i的值不发生变化,后一个永远为真值。



redsteps

职务:普通成员
等级:1
金币:1.0
发贴:144
#42002/1/29 7:57:29
不过两个表达式执行后
i都会增加1



路过的猪

职务:普通成员
等级:2
金币:1.0
发贴:334
#52002/1/29 9:15:19
redsteps在上个帖子中说
引用:
不过两个表达式执行后
i都会增加1


这种解释不正确!
goldgoat的解释才正确!



janlay

职务:管理员
等级:7
金币:28.0
发贴:7244
#62002/1/29 23:19:00
redsteps在上个帖子中说
引用:
不过两个表达式执行后
i都会增加1


后一个会,但前一个不会.
引用:
前一个导致i的值不发生变化



金山羊

职务:普通成员
等级:4
金币:10.0
发贴:827
#72002/1/30 8:26:21
两个运算后i的值都会加1
虽然第一个赋值语句没有使 i 增加
但后面的++使 i 增加,先执行赋值
如果是这样:i = ++i;
就是先加 1


5d.cn
FLASHDEP
TECHNOLOGY SUPPORT
JAVA/ACTIONSCRIPT/javascript
CFML/JSP/COLDFUSION/FLASH REMOTING
JRUN/COLDFUSIONMX
FLASH/DREAMWEARER

janlay

职务:管理员
等级:7
金币:28.0
发贴:7244
#82002/1/30 22:26:11
我还是不同意楼上的意见。对于前一个,我认为尽管++使i的值以本次操作完成后自加,但i==i++(这一点我想大家应该没有什么疑问),所有,i=i++等效于i=i,赋值语句又使i等于自身。这已在flash中得到证实:
i=3;
i=i++;
trace(i);
结果还是得到3

为什么++没有生效呢,我觉得它只在i++这句完成后使i的值加1,如果把这一句用汇编来表示,则会有几行(表示需要进行哪些步骤)。那么,i加1后语句只运行了一半,因为i++本身要赋给左边的i,其结果是在整个这一句执行完后,i的值不发生变化。

呵呵,以上都只是猜想。实际应用中根本没必要把表达式写这么复杂

编辑历史:[这消息被janlay编辑过(编辑时间2002-01-30 22:32:19)]


金山羊

职务:普通成员
等级:4
金币:10.0
发贴:827
#92002/1/31 10:00:05
看了janlay的解释我感到非常意外,就在flash里面实验了一下,果然值没有增加
不过我觉得这是flash的bug或缺陷
因为在c语言里面 i 的值是增加的
我也做了实验,用的vc6和tc2都是增加的


5d.cn
FLASHDEP
TECHNOLOGY SUPPORT
JAVA/ACTIONSCRIPT/javascript
CFML/JSP/COLDFUSION/FLASH REMOTING
JRUN/COLDFUSIONMX
FLASH/DREAMWEARER

janlay

职务:管理员
等级:7
金币:28.0
发贴:7244
#102002/1/31 20:24:37
呵呵,每个人的解释可能不尽相同,也导致编译/解释的方法不一样。避开这种容易产生分歧的写法,才是明智的办法



金山羊

职务:普通成员
等级:4
金币:10.0
发贴:827
#112002/2/1 17:26:14
是啊,像这种即没有什么用处,又容易出错的语句还是应该避免


5d.cn
FLASHDEP
TECHNOLOGY SUPPORT
JAVA/ACTIONSCRIPT/javascript
CFML/JSP/COLDFUSION/FLASH REMOTING
JRUN/COLDFUSIONMX
FLASH/DREAMWEARER