Primitive Types相等测试 Primitive Types Equality

2rightarrow In Actionscript, primitive types include the following 5 - Number, int, uint, Boolean, String (and strictly speaking, null & void). Primitive types equality is simple. There are three rules:

1. direct comparisons of numeric types are allowed and work as most people expected;

2. use PRIMITIVE_TYPE(ValueOfAnotherType) to convert types, e.g, String(2.0);

3. for primitive types, there is no difference between == and === (strict equality).

Testing:

var num:Number = 2.0;
var integer:int = 2;
var string:String = "2";

trace("num == integer: " + (num == integer));
// trace("num == string: " + (num == string)); // Error: 1176: Comparison between a value with static type Number and a possibly unrelated type String.
trace("num == Number(string): " + (num == Number(string)));
trace("String(num) == string: " + (String(num) == string));
//trace("integer == string" + (integer == string));
trace("integer == int(string): " + (integer == int(string)));
trace("String(integer) == string: " + (String(integer) == string));

trace("num === integer: " + (num === integer));
trace("String(integer) === string: " + (String(integer) === string));

and the corresponding output:

num == integer: true
num == Number(string): true
String(num) == string: true
integer == int(string): true
String(integer) == string: true
num === integer: true
String(integer) === string: true

Note: AS stores primitive values internally as immutable objects. For immutable objects, passing by reference is the same as passing by value.