Why eval(string) is not needed

C

Csaba Gabor

// Look ma! no evals!
function eval2 (string, noReturn) {
return Function((!noReturn ? "return " : "")+string)(); }

var aR = eval2("/x/");
var Yo = eval2("{a:1, l:1, e:1, r:1, t:1}");
var a = eval2("['Hi', 'Mom']");
var aPri = eval2("a.join(' ').replace(aR,'u');");
var foo = eval2("var f='';for (var i in Yo) f+=i; return(f)",true);
eval2 (foo+"('"+aPri+"')");


Csaba Gabor from Vienna :)
 
D

Douglas Crockford

Csaba said:
// Look ma! no evals!
function eval2 (string, noReturn) {
return Function((!noReturn ? "return " : "")+string)(); }

var aR = eval2("/x/");
var Yo = eval2("{a:1, l:1, e:1, r:1, t:1}");
var a = eval2("['Hi', 'Mom']");
var aPri = eval2("a.join(' ').replace(aR,'u');");
var foo = eval2("var f='';for (var i in Yo) f+=i; return(f)",true);
eval2 (foo+"('"+aPri+"')");

The Function constructor is just an alias for eval. It is equally as evil.

var aR = /x/;
var Yo = {a: 1, l: 1, e: 1, r: 1, t: 1};
var a = ['Hi', 'Mom'];
var aPri = a.join(' ').replace(aR, 'u');
var foo = function () {
var f = '';
for (var i in Yo) {
f += i;
}
return f;
}();
foo(aPri);

http://javascript.crockford.com
 
L

Lasse Reichstein Nielsen

Csaba Gabor said:
// Look ma! no evals!
function eval2 (string, noReturn) {
return Function((!noReturn ? "return " : "")+string)(); }

And merry first of April to you too :)

And a case where your eval2 fails to work like eval:

var x = "suckered!";
function foo() {
var x = 42;
alert(eval2("x"));
}
foo();

Good luck!
/L
 
V

VK

Csaba said:
// Look ma! no evals!
function eval2 (string, noReturn) {
return Function((!noReturn ? "return " : "")+string)(); }

var aR = eval2("/x/");
var Yo = eval2("{a:1, l:1, e:1, r:1, t:1}");
var a = eval2("['Hi', 'Mom']");
var aPri = eval2("a.join(' ').replace(aR,'u');");
var foo = eval2("var f='';for (var i in Yo) f+=i; return(f)",true);
eval2 (foo+"('"+aPri+"')");


Csaba Gabor from Vienna :)

eval('alert(eval(\'2+2\')/eval(\'2\'))'); // 2

Instead of three absolutely necessary eval's I could make it with just
one (others are inside the string so doesn't count :)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,770
Messages
2,569,584
Members
45,075
Latest member
MakersCBDBloodSupport

Latest Threads

Top