——表格格式范本.doc_第1页
——表格格式范本.doc_第2页
——表格格式范本.doc_第3页
——表格格式范本.doc_第4页
——表格格式范本.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

19.4 ActionScript中的语句、表达式和运算符语句、表达式和运算符是在程序开发中经常使用的术语。那么,到底什么算是表达式,怎样才算语句,运算符都有哪些?本节就将讨论这些问题。19.4.1 语句、表达式和运算符的关系可以这样来描述三者的关系:语句是完整的“代码的句子”,它是完整的一句话,可以用来做某些事情。而表达式更象是不完整的只言片语,可比作短语或词组,因为它们自身不能做任何事情,而是被用在语句中。表达式在被求值时会产生一个值。例如:如果你求值表达式“慢得象蜗牛”,你将得到一个实际的值(可能是每小时1米)。这与在Flash中的工作一样表达式price/2将产生一个值。而运算符,作为一个表达式的一部分,是用来指定如何组合、比较或修改表达式值的字符。运算符在其上执行运算的元素被称为操作数,运算符可以在一个或多个操作数上执行某个运算。例如:“加”运算符(+)在两个数字(操作数)上执行相加的运算。表达式2+2将产生一个值(4)。最后,语句sum=2+2;做了一件把值4赋给了变量sum的事情。OK,现在我们已经知道了这些术语的含义,可以仔细的探究它们了。19.4.2 算术运算符让我们关注这些执行简单的算术运算的运算符。这些运算符不会改变它们的操作数并且(当基于数字操作数执行操作时)你总能得到你期待的结果。运算符执行的运算+加法。即对两个数字操作数执行相加的运算。当两个操作数中至少有一个是字符串时,Flash会试图把另一个也转换成字符串,然后把两个字符串串联成一个字符串。-作为二元运算符时(简而言之,使用两个操作数),它将对两个数字操作数执行相减的运算;作为一元运算符时(基于一个操作数),通过将它放置到一个操作数的前面,它将产生操作数颠倒符号后的结果。如果操作数是正的,则结果将是负的。如果操作数是负的,则结果将是正的。*乘法。即对两个数字操作数执行相乘的运算。/除法。即对两个数字操作数执行相除的运算。%求模。即对两个数字操作数执行求模的运算。这会产生第一个数字除以第二个数字的余数。例如:20%7将产生6。除此之外,还有两个运算符(+和-)也执行简单的算术操作。但因为它们都改变了各自的操作数,因此我决定在本节后面的“赋值运算符”部分中讨论它们。尽管你可以借助Flash内建的Math类执行许多额外的数学运算(它们将在第二十四章中进行讨论),但你不要低估这些简单的运算符在表达式中的作用。当你查看下面的例子时紧记两件事情:第一,所有变量的值都假定已经事先被设置为数字,第二,这些仅仅是表达式,因此,就它们自身而言,它们不能做任何事情。平均数:sum/total一半:full/2中间点:lowest+(highest-lowest)/2)打折时的价格:price-(price*discount)秒(已知毫秒):milliseconds/1000尽管我没有为求模(%)运算符提供任何例子但实际上它是你可以得到的最具威力的运算符中的一个。它看上去似乎相当的乏味,仅仅是一个余数而已。但考虑你如何来判断某个数字是否是一个偶数它应该能够被2整除。或者说,当它被2除时,余数应该是0。类似的,要检查某个数字是否能够被3整除,只需要看看当它被3除时,是否没有余数即可。求模的用武之地就在这里。如果你使用anyNumber%2并且发现表达式的结果为0,则你就可以知道这个数字是偶数。19.4.3 比较运算符比较运算符被用于编写求值结果为真或假的表达式中。如果你还记得表达式通常位于一个更大的语句中的话,你就会理解为什么需要这样的表达式了。例如:就单词“true”本身而言,它没有任何意义。然而,一个完整的有一定意义的语句可能象这样“如果你的矫正视力达到1.0,那么你就可以学开车。”表达式“如果你的矫正视力达到1.0”的求值结果不是true就是false。要使这个语句变得更明确些,你可以说“如果表达式你的矫正视力达到1.0为真,则你就可以学开车。”这个例子是一个条件语句。这样的语句将在本章后面的“控制程序的流程”中详细的讨论。比较运算符就其使用形式而言很容易理解。所有这些运算符都需要两个操作数,它们的构成形式是“第一个操作数 运算符 第二个操作数”(就象124,在这里12是第一个操作数,是运算符,4是第二个操作数)。让我们看看所有这些运算符。运算符执行的运算大于。即当第一个操作数大于第二个操作数时产生真,否则产生假。=大于或等于。即当第一个操作数大于或等于第二个操作数时产生真,否则产生假。=小于或等于。即当第一个操作数小于或等于第二个操作数时产生真,否则产生假。=等于。即当第一个操作数与第二个操作数相等时产生真,否则产生假。=严格等于。即当第一个操作数与第二个操作数严格相等时产生真,否则产生假。!=不等于。即当第一个操作数与第二个操作数不相等时产生真,否则产生假。!=严格不等于。即当第一个操作数与第二个操作数严格不相等时产生真,否则产生假。记住,你使用这些运算符编写的表达式的结果总是不是真(true)就是假(false)。简单的说,它们除真或假外不能产生任何东西,好着是不好它们操作数与第二个操作数相等时产生真。行相减的运算。假并不意味着不好,而恰恰可能是非常好的。一个象这样的表达式25150)trace(恭喜,你简直就是天才!)elsetrace(抱歉,你的智商还没有达到天才级。)有趣的是尽管真和假是布尔数据类型的两种可能的变化。然而,你可以在表达式中使用它们,就好像它们是数字一样。真是1而假是0。例如:如果变量timesCheated大于1,则表达式score*(timesCheated1)的求值结果为0,不管score的值是多少。简单的说,timesCheatedb);输出为false。因为字符a的ASCII的值为97,b的ASCII的值为98,所以比较结果为false。trace(acab);输出为true。因为第一个字符串中的左起第一个字符和第二个字符串中的左起第一个字符的ASCII值相等,因此,继续将第一个字符串中的左起第二个字符和第二个字符串中的左起第二个字符的ASCII值进行比较,而c的ASCII值大于b,所以比较结果为true。需要清楚地是,要进行字符串的比较,两个操作数必须都是字符串才行。如果其中一个为数字,而另一个是字符串,则Flash会试图把这个字符串转换为数字,如果能转换成功(假如字符串是由数字构成的话),则进行两个数字的比较,否则,编译器会扔给你一个undefined。trace(51);/将输出true。因为字符串1将被转换成数字1,然后进行比较,结果为true。trace(5a);/将输出undefined。因为字符串a无法将被转换成数字。对于进行数字比较而言,两个操作数完全可以是对象的属性,就像这样:function Person(age)this.age=age;APerson=new Person(2);BPerson=new Person(3);trace(BPerson.ageAPerson.age);/将输出true。很值得谈谈的是=、!=、=和!=四个等于运算符,你不仅可以对数字、字符串、布尔值这些原始数据类型执行这些有关是否相等的运算,你还可以对对象这种引用数据类型执行此类运算。当对引用数据类型进行是否相等的比较运算时,只有当两个引用数据类型引用的是同一个对象时,这两个引用数据类型才被认为是相等的。下面的例子中两个对象被认为是相等的:function Person(age)this.age=age;APerson=new Person(2);BPerson=APerson;CPerson=APerson;trace(BPerson=CPerson);/将输出true;下面的例子中两个对象被认为是不相等的,尽管它们的属性值是相等的:function Person(age)this.age=age;APerson=new Person(2);BPerson=new Person(2);trace(BPerson=APerson);/将输出false。通过前面的trace(51)的例子,我们已经知道在Flash中,当进行比较的操作数的数据类型不同时,Flash会试图对操作数的类型进行转换,以便使其二者能够进行比较。但这会使得当你使用=运算符进行相等比较时无法确切的知道被比较的二者的数据类型是否也相同。要想进行严格的不进行自动数据类型转换的相等比较,你需要使用=或!=运算符。当使用严格等于或严格不等于运算符时,只有当两个操作数的数据类型和值都完全相等时,才被认为是相等的。让我们看下面的例子:trace(true=1);/输出为true。因为经类型转换后二者相等。trace(true=1);/输出为false。因为二者类型不同。再看下面的例子:trace(5!=5);/输出为false。因为经类型转换后二者相等。trace(5!=5);/输出为true。因为二者类型不同。注意,等于运算符由两个等号构成。单独一个等号(=)是一个完全不同的运算符。单个的等号执行一个赋值操作(就象你将在本节中后面小节看到的那样)。简而言之,=左边的变量被赋予=右边的表达式的值。这实际上是创建了一个完整的语句(因为它做了某些事情)而不是象=运算符所做的那样创建的是一个表达式。这样做不仅仅意味着左边的变量被改变,而且如果你的目的是创建一个将产生真或假的表达式的话,则你将发现结果将总是产生真。简单的说,age=18;将18作为值赋给age,而这个语句的求值结果将是真。相反,age=18将产生true或false(依赖于age变量的值)。另外,当你使用=时,age的值不会被改变。第一个事例说“age现在等于18”,而第二个事例说“age等于18吗?”。19.4.4 字符串运算符我们已经知道,当对两个操作数使用+运算符时,如果这两个操作数中至少有一个是字符串,Flash会试图把另一个也转换成字符串,然后把两个字符串串联成一个字符串。就像下面的例子说明的那样:a=你好,;b=世界!;c=a+b;/现在变量c保存着字符串你好,世界!。再如:trace(5+5);/输出为55。因为数字5会被转换成字符串5,两个字符串串联结果为55。除了+运算符可以应用于字符串外,你也可以将比较运算符应用于字符串,其运算方式我在前一小节中已经讲解过了,在此不再赘述。19.4.5 逻辑运算符逻辑运算符的操作数是一个或两个布尔值,运算的结果也是一个布尔值。逻辑运算符“与”和“或”使用两个操作数,而“非”使用一个操作数。逻辑运算符扩展了比较运算符的能力,从而可以让你做出象“age大于14且小于18”(在这个事例中“且”就起到逻辑运算符的作用)这样的复合表达式。你实际上是在比较两个表达式,但每一个表达式的结果都必须是真或假。如果你是在数字上使用这些逻辑运算符,则除0之外的任何数字都被认为是真。运算符执行的运算&逻辑“与”。如果两个操作数都是真,则产生真,否则为假。|逻辑“或”。如果两个操作数中任何一个(或两个都)是真,则产生真,否则为假(即仅当两个操作数都是假是才产生假)。!逻辑“非”。当操作数(跟在!之后)是假时,则产生真,当操作数是真时,则产生假。让我们看下面的例子:if (iq150)&(age14)trace(发现一个天才儿童!)上面的例子中,假如智商(iq)超过150且年龄小于14的话,则在输出窗口显示一段话。再看下面的例子:if (stature70)trace(可以免票);elsetrace(需要购票);在上面的例子中,假如身高低于1.2米或者年龄超过70岁都可以免票,否则就需要购票。尽管这些表达式非常容易领悟,但有一些有趣的基本原则需要注意。我在表达式中包含了额外的圆括号以使这些表达式更加的清楚。但由于逻辑运算符的优先级非常的低(有关运算符的优先级将在本节最后进行讲解),因此,位于逻辑运算符两边的表达式会首先被求值。简单的说,age13&age13) & (age13 & 19将不能工作。在我们平常说话中,你说“年龄大于13且小于19”没有任何问题,但在ActionScript中,你应该说“年龄大于13且年龄小于19”。19.4.6 位运算符位运算符将是你最少用到的运算符,我想你们中的一些人可能永远都不会需要使用它。位运算通常只在利用汇编语言或C/C+语言进行系统软件中的底层开发时才会用到,在Flash中几乎没有什么用处。但不管怎么说,如果你正需要用Flash来做一些演示位运算的课件,或是一些演示程控的应用,那你会希望了解什么是位运算符。所谓位运算就是指进行二进制位的运算。那么,什么是位呢?我们知道,计算机的内存是由众多的被称为“字节(byte)”的单元组成的。每一个字节都有一个地址。而一个字节一般由8个二进制位组成,其中最右边的一位被称为“最低位”,最左边的一位被称为“最高位”。每一个二进制位的值不是0就是1。尽管当我们在用ActionScript编程时,假如想使用7这个数字,就直接输入7就可以了。但在我们的PC机中,这个数字7是以4个字节来存储的。实际上,对于7这样的整数而言,用两个字节存储更经济,但由于ActionScript中是用双精度浮点数来表示所有的数字的,因此,7也会占用4个字节,即用32个二进制位来表示。让我们看看如何把7这个数字用二进制来表示。要把十进制数转换成二进制数,就用十进制数字除以2,取得其余数,第一次的余数就是二进制的最低位,第二次余数就是次低位(即比最低位高一位的那个位),依此类推,直到被除数小于2,最后的被除数就是二进制的最高位。第一次,7除以2,商为3,余数为1。因此,二进制的最低位为1。第二次,3除以2,商为1,余数为1。因此,二进制的次低位为1。第三次,1小于2。因此,二进制的最高位为1。这样十进制的数字7转换成二进制数就是111。如此,这四个字节中最右边的一个字节的内容是00000111,其余三个字节的内容都是00000000。现在,我们对数字的二进制表示已经基本掌握了,让我们看看都有哪些位运算符,以及如何用这些运算符对数字进行按位运算。按位运算符中除了按位“非”()外都是二元运算符。运算符执行的运算&按位“与”。两个操作数中,如果两个相应的位都是1,则该位的运算结果就为1,否则为0。|按位“或”。两个操作数中,两个相应位中只要有一个为1,则该位的运算结果就为1。换句话说,只有当两个相应位都是0时,该位的运算结果才为0。按位“异或”。两个操作数中,如果两个相应位的值相同,则该位的运算结果就为0,否则就为1。按位“非”。这是按位运算符中唯一的一个一元运算符,用来对一个二进制数按位取反,即将0变为1,1变为0。右移位。用来将第一个操作数中的各二进制位都向右移动由第二个操作数中指定的位数。无符号右移位。用来将第一个操作数中的各二进制位都向右移动由第二个操作数中指定的位数,且左边空出的位数都添上0。让我们通过下面的一些例子来更好的领悟位运算符的运用(为了使代码更清晰,我使用一些比较小的数字,并且只用4个字节中的最后一个字节来表示,因为其他三个字节都是零):a=3&5;trace(a);/输出为1。因为3是00000011,而5是00000101,按位“与”的结果是:0000001100000101(&)-00000001使用按位“与”,你可以把某个数字的某些指定位的值保存下来。具体的说,你可以设计一个数字B,使数字B中的那些与数字A中你想要保存其值的那些位的相应位的值为1,且让数字B中其余的位的值为0,然后让这两个数字进行按位“与”,则运算的结果就自然保存了数字A中你想要保存的那些位的值。例如,有一个数字01101010,你想把其左起第2、3、6、7、8位的值保存下来,则你可以这样:01101010(这就是数字A)01100111(这就是你设计的数字B)(&)-01100010(所得结果中保留了你要保存的那些位的值)3和5按位“或”的结果为7。a=3|5;trace(a);/输出为7。3和5按位“异或”的结果为6。a=35;trace(a);/输出为6。使用按位“异或”可以对某个数字的特定位的值进行翻转。例如,如果有一个数字01110101,你想使其低4位翻转,即1变为0,0变为1,则你只需让它与00001111进行按位“异或”即可:0111010100001111()- 01111010按位“异或”还可以实现在不借助第三个变量的情况下交换两个变量的值。例如,如果a为3,b为5,要交换a和b的值,你可以使用下面的脚本:a=3;b=5;a=ab;b=ba;a=ab;trace(a);/输出为5。trace(b);/输出为3。这是因为b=ba;这行代码相当于b=b(ab)=bab=abb=a0=a。而a=ab;这行代码相当于a=(ab)a=aba=b。对于按位“非”运算符(),需要注意的是要把它和负运算符(-)区分开来。例如,对3执行按位“非”的结果是-4,而不是-3。a=3;trace(a);/输出为-4。对某个数字执行“左移位”运算,相当于对该数字进行乘法运算,左移一位,相当于对该数字乘以2,左移两位,相当于对该数字乘以22=4。就像下例所示:a=3;a=a2;trace(a);/输出为2。需要的注意的是,如果原先数字的最高位为0,则在右移位时,左侧空出的位将被填充0,如果原先数字的最高位为1,则填充1。“无符号右移位”同“右移位”基本一样,只是无论原先数字的最高位为0还是1,在右移位时,左侧空出的位都将被填充0。19.4.7 赋值运算符在Flash ActionScript中,你是使用赋值运算符来为变量赋值的。赋值运算符的老祖宗是等号(=)。在下面你会看到,除了=外,通过将=与其他的算术、逻辑和位运算符结合到一起,可以构成许多被称为“复合赋值运算符”的赋值运算符。但事实上,这些复合赋值运算符尽管会使程序代码变得更简短,有时也能使某些工作变得更容易,但更多的时候,它们会使你看不清程序的逻辑。在使用赋值运算符时,有一点需要注意,那就是赋值运算符的左侧必须是变量或属性。这样的代码是错误的:5+;。运算符执行的运算=赋值。将右边表达式的值放入左边的变量中。+递增。这是一个一元运算符,它对作为操作数的变量执行加1运算后又把结果重新赋给该变量。-递减。这是一个一元运算符,它对作为操作数的变量执行减1运算后又把结果重新赋给该变量。+=相加并赋值。它对左边变量的值和右边表达式的值进行加法运算,并把运算结果重新赋给该变量。-=相减并赋值。它用左边变量的值减去右边表达式的值,并把运算结果重新赋给该变量。*=相乘并赋值。它对左边变量的值和右边表达式的值进行乘法运算,并把运算结果重新赋给该变量。/=相除并赋值。它用左边变量的值除以右边表达式的值,并把运算结果重新赋给该变量。%=求模并赋值。它用左边变量的值除以右边表达式的值,并把所得的余数重新赋给该变量。=右移位并赋值。=无符号右移位并赋值。=按位“异或”并赋值。|=按位“或”并赋值。&=按位“与”并赋值。对于这些复合赋值运算符,我只举一个例子:counter+=10;等效于:counter=counter+10;其他复合赋值运算符的用法你猜也能猜到的,在此不再赘述。除了=赋值运算符外,你用的最多的可能就是递增赋值运算符(+)和递减赋值运算符(-)了。你经常会把它们用于对计数器变量加1或减1。就象这样:counter+;上面的语句等效于counter = counter + 1;。对于递增和递减运算符而言,它们有两种使用格式:预先递增(或递减)格式和滞后递增(或递减)格式。两种格式的不同之处是你是将这些运算符放置在操作数的前面还是后面,就象这样+counter或counter-,这会产生一点微妙的但却非常重要的不同。将递增运算符放置在操作数的后面会递增counter但“返回”操作数在递增发生前的值。当你的整个的语句只有一个counter+时,这个微妙的差异无关紧要。然而,当你说otherVariable=counter+时,otherVariable将变成counter被递增前的值。相反,如果你说otherVariable =+counter,otherVariable将变成counter递增后的值。不能简单的说这两种方式哪种好,取决于你的目的它们都能够被很好的利用。看下面的例子:a=1;b=1;x=a+;y=+b;trace(x);/输出为1。trace(y);/输出为2。尽管预先递增(或递减)和滞后递增(或递减)之间的差异可能看起来很微妙,但在某一特定的情形中,你可能不得不使用预先递增或预先递减的方式。当操作数是一个你无法改变的值时,只有用预先递增或预先递减才具有意义。例如:一个影片剪辑的_totalframes属性无法通过编程来改变,如果你想要使用一个比_to

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论