eval( ) Global Function | Flash 6 |
interpret a string as an identifierFlash 4; illegal on left side of assignment in |
A string expression that matches some identifier. Can be qualified (e.g., "_root.speed") or unqualified (e.g., "speed").
The value of the variable represented by stringExpression or a reference to the object, movie clip, or function represented by stringExpression. If stringExpression does not represent an existing identifier, undefined is returned.
The eval( ) function provides a means of dynamically constructing an identifier based on a string of text. It looks up the variable identified by stringExpression and returns its value. For example, here we use the return value of eval( ) to set the value of currentName:
var name1 = "Kathy"; var count = 1; // Look up name1 and return its value, "Kathy", which we assign to currentName var currentName = eval("name" + count);
And here we control a dynamically named movie clip, star1:
var count = 1; eval("star" + count)._x += 100; // Move star1 right 100 pixels
In Flash 4 and 5 (but not Flash 6), we can also use an eval( ) invocation in place of an identifier that is the left-hand operand of an assignment expression, as in:
var count = 4; eval("name" + count) = "Simone"; // Sets name4 to "Simone" in Flash 4 and 5
However, in Flash 6 eval( ) cannot be used on the left side of an assignment (in keeping with the ECMA-262 specification). To dynamically construct the left-hand side of an assignment expression, use the property access operator, [ ], or the set statement instead:
// Using [ ] var count = 4; this["name" + count] = "Simone"; // Sets name4 to "Simone" trace (name4); // Using set var count = 4; set("name" + count, "Simone"); // Also sets name4 to "Simone" trace (name4);
Note that, unlike its JavaScript cousin, eval( ) in ActionScript does not allow for the compiling and execution of arbitrary blocks of code in a string. Full support of eval( ) would require an ActionScript compiler in the Player, which would cause too great an increase in the Player size.
As of Flash 5, eval( ) is rarely needed for dynamic variable access. When managing multiple pieces of data, use arrays and objects instead.
The eval( ) function is often used to convert the MovieClip._droptarget string property or the Selection.getFocus( ) return value to an object reference. In the following example, suppose we have a series of cartoon face clips. When the user drops a food clip onto one of the faces, we retrieve the path to the face in question using _droptarget, and then we use eval( ) to retrieve an object reference to that face. Finally, we send the face to a frame showing the mouth full of food:
// Convert _droptarget string to a reference theFace = eval(food._droptarget); // Control appropriate face clip using converted reference theFace.gotoAndStop("full");
"Executing Code in a String with eval," in Chapter 4