JavaScript - 将字符串变量传递给 eval
JavaScript - pass string variable to eval
我的部分代码生成了一个字符串,然后假设函数使用该字符串在 VoxelJS 中生成卡盘。
示例字符串是“(y == 1)?1 : 0”
然后我需要将其添加到这样的函数中,例如。 "function(x, y, z){return (y == 1)? 1 : 0}"
我认为使用 eval 会将我的字符串更改为所需的代码,如下所示:
gtest = function(x, y, z){return eval(generationString) };
但我误解了 eval 的用法,并意识到我需要尝试其他方法。
如果我在 JavaScript 控制台中查看 gtest
,它说它的结构是 function (x, y, z){return eval(generationString) }
,而我希望它看起来像 function (x, y, z){return return (y == 1)? 1 : 0}}
。尝试传递包含 eval 的代码会导致 VoxelJS 在尝试生成新块时 crash/freeze。
如何将带有 javascript 代码的字符串转换为我想要的函数代码?
我意识到这可能是一个难以理解的问题,很抱歉,我不确定如何用其他方式描述它。
我在发布后 30 秒就找到了答案,请使用 function() 构造函数。
Given a string describing a Javascript function, convert it to a Javascript function
gtest = new Function('x', 'y', 'z', 'return ' + generationString);
我的部分代码生成了一个字符串,然后假设函数使用该字符串在 VoxelJS 中生成卡盘。
示例字符串是“(y == 1)?1 : 0”
然后我需要将其添加到这样的函数中,例如。 "function(x, y, z){return (y == 1)? 1 : 0}"
我认为使用 eval 会将我的字符串更改为所需的代码,如下所示:
gtest = function(x, y, z){return eval(generationString) };
但我误解了 eval 的用法,并意识到我需要尝试其他方法。
如果我在 JavaScript 控制台中查看 gtest
,它说它的结构是 function (x, y, z){return eval(generationString) }
,而我希望它看起来像 function (x, y, z){return return (y == 1)? 1 : 0}}
。尝试传递包含 eval 的代码会导致 VoxelJS 在尝试生成新块时 crash/freeze。
如何将带有 javascript 代码的字符串转换为我想要的函数代码?
我意识到这可能是一个难以理解的问题,很抱歉,我不确定如何用其他方式描述它。
我在发布后 30 秒就找到了答案,请使用 function() 构造函数。
Given a string describing a Javascript function, convert it to a Javascript function
gtest = new Function('x', 'y', 'z', 'return ' + generationString);