| 首页 | 新闻 | 网页 | 设计 | 色彩 | 原创 | 视觉 | 素材 | 动漫 | 酷站 | 策划 | 文案 | 访谈 | 运营 | 编程 | 数据库 | 服务器 | 下载 | 图库 | 
您的位置: 幽幽天空 > 网页 > 网页制作 > Flash教程 > ActionScript教程 > 文章正文 用户登录
谈谈BLOG营销中的
如何加入透明Flas
为新浪博客添加fl
flashget下载联盟
265联盟:“Flash
HKflash提供免费个
谈谈我做站失败的
谈谈个人网站发展
谈谈CNNIC 域名投
谈谈网站与网络营

谈谈Flash的一些语法基础和系统核心 2.2 变量的数值计算           

谈谈Flash的一些语法基础和系统核心 2.2 变量的数值计算

作者:佚名 来源:闪吧 作者: ox_thedarkness 更新:2007-1-13 20:47:28 错误报告 我要投稿

参与本文讨论:闪吧本文讨论帖
2.2.1 变量的自动类型转换
tip: trace( string ) trace( number ) 可以在状态栏输出一行文字。
as里面的变量类型转换方便到一塌糊涂
几个等价的冬冬:
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
然后就是变量不存在:
a = 102.43
trace(typeof a + " " +a);
a += "";
trace(typeof a + " " +a);
a *= 1;
trace(typeof a + " " +a);
结果:
number 102.43
string 102.43
number 102.43
2.2.2 Infinity、 -Infinity 和NaN 他们是3个数字常量。关于他们的官方描述,请在help里面搜索他们的名称。 Infinity 和-Infinity:正无穷大
很多运算结果都是正无穷。比如,任何数除以0得到结果是正无穷大。
Infinity * -1 = -Infinity
任何数除以Infinity = 0
NaN:not a number
他表示超出数字表示范围的数字(他是数字),值等于Number.NaN
NaN参与大部分数学运算返回都是NaN
但是参与某些运算,比如除法结果是 Infinity或者-Infinity 他们参与字符串转换分别转换成对应的字符串比如:
var a = "NaN.toString() is: "
a += NaN
trace(a);
结果是:
NaN.toString() is: NaN 2.2.3 undefined 的类型转换 undefined的类型转换基本上都涉及到兼容性问题: 进行类型转换的时候,undefined 在 flashplayer6和7中有不同的值。
数字转换:
6中会转换成数字0,也就是说,所有未定义的变量数值计算都作0看
但是7中会转换成一个数字常量NaN
下例中,如果b==nul,那么如下的代码在flash6 和7中会有两个结果。
trace(b);
b++;
trace(b);
flashplayer6结果是:
undefined
1 flashplayer7结果是:
undefined
NaN
字符串转换:
6中会转换成空字串,但是7中会转换成一个字符串undefined:
假设下例b未定义
: a = "result: "
a += b;
trace(a);
flashplayer6结果是:
result:
flashplayer7结果是:
result: 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差别很小,而不是相等。 出于上述理由,我们能用整数尽量用整数。
文章录入:skyuu    责任编辑:skyuu 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    发表评论:
    姓名:  评 分: 1分 2分 3分 4分 5分
     
  • 严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
  • 用户需对自己在使用幽幽天空服务过程中的行为承担法律责任。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表机友个人观点,与本网站立场无关。