View comments | RSS feed

eval function

eval(expression:Object) : Object
eval(expression:String) : Object

Accesses variables, properties, objects, or movie clips by name. If expression is a variable or a property, the value of the variable or property is returned. If expression is an object or movie clip, a reference to the object or movie clip is returned. If the element named in expression cannot be found, undefined is returned.

In Flash 4, eval() was used to simulate arrays; in Flash 5 or later, you should use the Array class to simulate arrays.

In Flash 4, you can also use eval() to dynamically set and retrieve the value of a variable or instance name. However, you can also do this with the array access operator ([]).

In Flash 5 or later, you cannot use eval() to dynamically set and retrieve the value of a variable or instance name, because you cannot useeval() on the left side of an equation. For example, replace the code

eval ("var" + i) = "first";

with this:

this["var"+i] = "first"

or this:

set ("var" + i, "first");

Availability: ActionScript 1.0; Flash Player 5 - Flash Player 5 or later for full functionality. You can use the <code>eval()</code> function when exporting to Flash Player 4, but you must use slash notation and can access only variables, not properties or objects.

Parameters

expression:Object - The name of a variable, property, object, or movie clip to retrieve. This parameter can be either a String or a direct reference to the object instance (i.e use of quotation marks (" ") is optional.)

Returns

Object - A value, reference to an object or movie clip, or undefined .

Example

The following example uses eval() to set properties for dynamically named movie clips. This ActionScript sets the _rotation property for three movie clips, called square1_mc, square2_mc, and square3_mc.

for (var i = 1; i <= 3; i++) {
 setProperty(eval("square"+i+"_mc"), _rotation, 5);
}

You can also use the following ActionScript:

for (var i = 1; i <= 3; i++) {
 this["square"+i+"_mc"]._rotation = -5;
}

See also

Array, set variable statement


Version 8

Comments


No screen name said on Feb 21, 2006 at 1:54 AM :
This appears to be worded incorrectly or outrighly wrong:

"...In Flash 5 or later, you cannot use eval() to dynamically set and retrieve the value of a variable or instance name, because you cannot useeval() on the left side of an equation..."

I'm using flash 8, and it is being used to retreive the value of a variable and set it to another - without warnings or errors.

This is because I'm not using it on the left. In this version (8) I can use eval(expression) on the right hand side of the equation to retreive dynamic information.

Example:
Next.onRelease = function() {
if (numUsers < 2) {
} else {
userDisplayIndex++;
if (userDisplayIndex > numUsers) {
userDisplayIndex = 1;
}
}
userName_var = eval("users.student" + userDisplayIndex + "Name");
UserID_var = eval("users.student" + userDisplayIndex + "ID");
};

This would usually be coded using an array, however arrays cannot be properly tranmitted through POST. (I was using flash to comunicate with PHP in this application). Which is why it might not always be used, but here I'm using it instead of re-defining variables.

Therefore the abouve text probably should be reworded to something like:
"...In Flash 5 or later, you cannot use eval() to dynamically set and retrieve the value of a variable or instance name on the left side of an equation..."
mr_jazz said on Mar 30, 2006 at 1:46 AM :
I have problems with use eval in as2 class.
Example:

class Test {
var obj1: String = "test";

function parse() {
trace(eval("this.obj1"));
}
}

--
var test:Test = new Test();
test.parse();

Compiler return error:
**Error** D:\temp\test\Test.as: Line 5: There is no property with the name 'this.obj1'.
trace(eval("this.obj1"));
No screen name said on May 19, 2006 at 8:12 PM :
This works, you have to put your string into a varible and then evaluate the variable.
Freaky, but works.

class XMLaObjeto {
var objeto:Object;
var destinoInicial:Object;

function XMLaObjeto(destino:Object){

}

public function parser(variables:XMLNode){
var vari:Object;
var otroObj:String="_level0.skin_mc.titulo0";
vari=eval(otroObj);
trace(vari);
vari.text="funciona";
}
}

Regards,
Fernando Dougnac
Fumio Nonaka said on Aug 5, 2006 at 7:19 AM :
[Wrong] "In Flash 5 or later, you cannot use eval() to dynamically set and
retrieve the value of a variable or instance name, because you cannot
useeval() on the left side of an equation."

[Correct] "In Flash Player 6 or later, you cannot use eval() to dynamically
set and retrieve the value of a variable or instance name, because you
cannot useeval() on the left side of an equation."

See: "Eval() on the left side of an argument causes error"
http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=tn_16187
mmjp_ps said on Aug 8, 2006 at 10:44 PM :
In Flash 5 or later > In Flash 6 or later
refer: http://www.adobe.com/go/tn_16187

 

RSS feed | Send me an e-mail when comments are added to this page | Comment Report

Current page: http://livedocs.adobe.com/flash/8/main/00001726.html