续
AS3.0的等号,知道的人很多。但真正知道的人却很少。
ECMA-262的等号的运算规则
x == y(x,y为一个值)返回true或false根据以下的规则:
- 如果 Type(x) 不等于 Type(y), 跳到规则14。 (*Type(v)返回v的类型)
- 如果 Type(x) 未定义 ,返回 true。
- 如果 Type(x) 为null ,返回 true。
- 如果 Type(x) 不为 Number ,跳到规则11。
- 如果 x 为 NaN ,返回 false。
- 如果 y 为 NaN ,返回 false。
- 如果 x = y(数学上,数字的比较),返回 true。
- 如果 x 为 +0 并且 y 为 -0,返回 true。 (*在计算机内部,+0与-0是不一样的)
- 如果 x 为 -0 并且 y 为 +0 ,返回 true。
- 返回 false。
- 如果 Type(x) 为 String 并且 x 等 于 String(y) , 返回 true。否则返回 false。
- 如果 Type(x) 为 Boolean 并且 x 等 于 Boolean(y) , 返回 true。 否则返回 false。
- 如果 x,y指向相同的对象 返回 true。否则返回 false。
- 如果 x 未定 并且 y 为 null,返回 true。
- 如果 x 为 null 并且 y 未定义,返回 true。
- 如果 Type(x) 为 Number 并且 Type(y) 为 String ,返回 x == Number(y)。
- 如果 Type(x) 为 String 并且 Type(y) 为 Number ,返回 Number(x) == y。
- 如果 Type(x) 为 Boolean ,返回 Number(x) == y。
- 如果 Type(y) 为 Boolean ,返回 x == Number(y)。
- 如果 Type(x) 为 String 或 Number 并且 Type(y) 为 Object, 把 y 变成基本类型在比较。
- 如果 Type() 为 Object 并且 Type(y) 为 String 或 Number, 把 x 变成基本类型在比较。
- 返回 false。
等号的一般规则(数学定义的规则)
- a==b <=> b==a
- a==b, a==c => b==c
- a===b => a==b
- a != b => !(a==b)
等号的特殊规则
先来看下面的代码:
var foo:Object = 0;
if ("" == foo) {
trace("foo is Empty String.");
}
上面的代码感觉是判断foo是不是空字符串。因为foo == 0,所以foo.toString() == "0"。因为""不等于"0" 所以 什么也不输出。
但实际上,因为Number("") == 0所以输出的是"foo is Empty String."!
这是因为根据ECMAScript的定义,(字符串) == (数字) 的规则是Number(字符串) == (数字)。
其他重要的规则:
- NaN != NaN
- null == undefined
![[Google]](http://www.google.com/logos/Logo_25wht.gif)
![[Synchronous Space]](http://weihe924stephen.googlepages.com/syncspace-banner.jpg)
![[Creative Commons License]](http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png)
![[Add to Google]](http://buttons.googlesyndication.com/fusion/add.gif)
![[Aggregated by MXNA]](http://weblogs.macromedia.com/mxna/images/mxna88x31.gif)
![[Flex.org]](http://www.flex.org/images/flexorg.gif)
![Validate my Atom 1.0 feed [Valid Atom 1.0]](http://validator.w3.org/feed/images/valid-atom.png)
![Validate my RSS feed [Valid RSS]](http://resource.googlecode.com/files/valid-rss.png)
![[I heart FeedBurner]](http://www.feedburner.com/fb/images/pub/i_heart_fb.gif)
没有评论:
发表评论