谈谈Flash的一些语法基础和系统核心 2.2 变量的数值计
tip: trace( string ) trace( number ) 可以在状态栏输出一行文字。1 == true; 0 == false , 但是其他数字以及字符串都不能和boolean等价。
还有就是: null == undefined转换并没有优先级,关键看运算符。 比如,任何数字或者boolean + 一个string 结果都被强制转换成 string,而undefined强制转换为string的时候是一个空字串 "",而 string * 一个数字 string 会被转换成数字。 你可以用 ""+12.32 把数字12.32变成字符串,也可以用"12.32" * 1 把字符串"12.32"变成数字tip: typeof <变量名> 返回一个字符串,表示变量的基本类型:
基本类型:number、 boolean 、string
引用类型:object、 function 、movieclip
然后就是变量不存在:
他们是3个数字常量。关于他们的官方描述,请在help里面搜索他们的名称。很多运算结果都是正无穷。比如,任何数除以0得到结果是正无穷大。
Infinity * -1 = -Infinity
任何数除以Infinity = 0
NaN他表示超出数字表示范围的数字(他是数字),值等于Number.NaN
NaN参与大部分数学运算返回都是NaN
但是参与某些运算,比如除法结果是 Infinity或者-Infinity 他们参与字符串转换分别转换成对应的字符串比如:
var a = "NaN.toString() is: "
a += NaN
trace(a);进行类型转换的时候,undefined 在 flashplayer6和7中有不同的值。
数字转换:6中会转换成数字0,也就是说,所有未定义的变量数值计算都作0看
但是7中会转换成一个数字常量NaN下例中,如果b==nul,那么如下的代码在flash6 和7中会有两个结果。
trace(b);
b++;
trace(b);6中会转换成空字串,但是7中会转换成一个字符串undefined:但是由于6里面trace()函数重载了undefined值,所以:
trace( undefined ) 显示 undefined
而trace( "" + undefined) ,首先计算 ""+undefined ,结果是"" ,于是输出空行。
2.2.4 浮点数
0.15 + 0.15 = 0.3吗? 显然,执行:
trace( 0.15+0.15 == 0.3 )
结果是true。 那么,0.1 + 0.2 = 0.3吗?
不要想当然,上机试试才知道: trace( 0.1 + 0.2 == 0.3 )
结果居然是false!! 怎么回事?那么0.1 + 0.2到底是多少呢? 试试看:
trace( 0.1 + 0.2)
结果的确显示0.3,可是 0.1 + 0.2 == 0.3 结果仍然是flase…… 看看这个:
trace( 0.1 + 0.2 - 0.3 )
结果是: 5.55111512312578e-17
也就是相差大约 5 x 10的-17次方……
flash里面的数,无论整数浮点数统称 number ,然而在内部还是有区别的。整数计算没有误差,而浮点数计算总会出现误差。
一定要避免由此而出现bug,整个世界可能就在某个角落莫名其妙的崩溃。防不胜防而且很难检测出来。
比如,对于浮点数,千万不能用 == 判断两个数是否相等。
如果是循环,用大于、小于;
如果一定要判断浮点数相等的话,你应该类似这样替代 if(a == b):
if ( (a< b + 1e-15) && (a>b -1e-15) )也就是要求a 和b差别很小,而不是相等。 出于