最近因为一个bug偶然发现了as3的一个隐秘的特性,即在两个对象之间是用比较运算符。
当然,我要说的不是比较两个对象相等还是不相等(== or !=),而是大于或者小于(> or <):
var o:Object = new Object();
var oo:Object = new Object();
trace(o>oo);//false
trace(o<oo);//false
虽然我们从未定义过(也没有办法定义)这种比较,但是这段代码还是通过编译了,并且运行出了结果。
但是很显然这个是没有太大意义的,至少在Object对象中是没有太大意义的。
不过我想既然设计上能允许这种比较存在,语言的设计者,就应该存在某种意图。事实上,在flash内部,对象之间的比较,是通过调用对象的toString()方法来实现的,即对象之间的比较本质上是两个字符串之间的比较。
我们可以利用这种本质来去使得某种对象之间的比较具有实际意义,当然需要注意的是这是一种低效的方法。