我在JavaScript中将函数的名称作为字符串.如何将其转换为函数指针,以便稍后调用?
根据具体情况,我可能还需要将各种参数传递给方法.
一些功能可能采取的形式namespace.namespace.function(args[...]).
我正在编写一些JavaScript代码来解析用户输入的函数(用于类似电子表格的功能).解析了公式后,我可以将其转换为JavaScript并eval()在其上运行以产生结果.
但是,eval()如果我可以避免它,我总是回避使用,因为它是邪恶的(而且,无论是对还是错,我一直认为它在JavaScript中更加邪恶,因为要评估的代码可能会被用户改变).
那么,什么时候可以使用它?
快速问题.JavaScript中的Eval是不安全的,不是吗?我有一个JSON对象作为字符串,我需要把它变成一个实际的对象,所以我可以获取数据:
function PopulateSeriesFields(result)
{
data = eval('(' + result + ')');
var myFakeExample = data.exampleType
}
Run Code Online (Sandbox Code Playgroud)
如果它有助于我使用jQuery中的$ .ajax方法.
谢谢
我有一些在服务器端的配置文件中指定的JavaScript代码.由于我无法在配置语言(Lua)中指定JavaScript函数,因此我将其作为字符串.服务器返回一些JSON中的字符串,我让客户端使用清理函数解释它:
parse_fields = function(fields) {
for (var i = 0; i < fields.length; ++i) {
if (fields[i].sortType) {
sort_string = fields[i].sortType;
fields[i].sortType = eval(sort_string);
}
return fields;
}
};
Run Code Online (Sandbox Code Playgroud)
所以基本上它只是评估sortType它是否存在.问题是Firebug eval()在线路上报告了"语法错误" .当我在Firebug控制台上运行相同的步骤时,它没有任何问题,我可以按照我的预期执行该功能.我尝试了一些不同的变化:window.eval而不是简单的eval,存储sortType我上面所做的,并尝试对字符串进行小的变化.
的采样值fields[i].sortType是"function(value) { return Math.abs(value); }".这是我在Firebug控制台中进行的测试:
>>> sort_string
"function(value) { return Math.abs(value); }"
>>> eval(sort_string)
function()
>>> eval(sort_string)(-1)
1
Run Code Online (Sandbox Code Playgroud)
和Firebug中的错误本身:
syntax error
[Break on this error] function(value) { return Math.abs(value); }
Run Code Online (Sandbox Code Playgroud)
可能相关的最后一点是,这些都包含在Ext JS onReady()函数中,Ext.ns …
可能重复:
jQuery使用(new Function("return"+ data))(); 而不是eval(数据); 解析JSON,为什么?
给定一个表示有效JSON字符串的字符串,这两种解析方法之间是否存在差异:
var str, obj;
str = '{"prop":"value"}';
// method 1:
obj = eval( '(' + str + ')' );
// method 2:
obj = ( new Function( 'return (' + str + ');' ) )();
Run Code Online (Sandbox Code Playgroud)
我注意到jQuery使用第二种方法来解析JSON字符串(在没有内置JSON解析器的环境中).我想知道他们为什么不使用第一种方法.为什么要创建一个函数对象并在可以使用时调用它eval()?
我想知道是否可以将函数foo()作为属性传递func="foo()"并this.func()在聚合物元素内部调用它?
<foo-bar func="foo()"></foo-bar>
Polymer({
is: 'foo-bar',
properties: {
func: Object,
},
ready: function() {
this.func();
}
});
Run Code Online (Sandbox Code Playgroud)
我一直试图让这个工作多年没有运气.
提前致谢.
上下文:我正在为我的应用程序设置编写一个 Redux reducer(尽管这个问题不是 Redux 特定的),它是一个嵌套对象。我想使用动态给出的属性名称修改设置对象。
例子:
const settings = {
service: {
username: 'TEST',
password: ''
}
}
// Normally this would be passed by Redux, but for the purposes of this exercise it's hardcoded
const settingKey = 'service.username';
console.log(settings[settingKey]); // undefined
console.log(eval(`settings.${settingKey}`)); // works, but badRun Code Online (Sandbox Code Playgroud)
我能想到在不使用 eval 的情况下访问子对象的唯一方法是使用正则表达式将其拆分settingKey为其组成部分:
const match = /(.+)\.(.+)/.exec(settingKey);
console.log(settings[match[1]][match[2]];
Run Code Online (Sandbox Code Playgroud)
const match = /(.+)\.(.+)/.exec(settingKey);
console.log(settings[match[1]][match[2]];
Run Code Online (Sandbox Code Playgroud)
这有效,但是
有没有一种方法可以在不使用正则表达式或 eval 的情况下使用动态名称访问嵌套对象的属性?
我正在尝试将字符串值转换为表达式,以便我可以在if条件中使用它:
var StringVal = '20 > 18 && "yes" == "yes"';
if(StringVal){
....
}
Run Code Online (Sandbox Code Playgroud)
有可能这样做,请建议我.
谢谢
有什么方法可以动态注入存储在 AngularJS 控制器中的字符串中的 JavaScript 代码吗?
var dynamicJS = "function DoSomething(value){var x = 1+1 return 2;}"
Run Code Online (Sandbox Code Playgroud)
我必须将上述函数动态注入到我的 AngularJS 控制器中,并在下拉列表的选择更改时调用它,其值绑定到 AngularJS 控制器。原因是 JavaScript 函数会根据我在应用程序级别的配置所拥有的每一行数据而有所不同。我知道我们可以利用,$eval但希望获得一些更好的方法(如果存在)。
谁能给我任何关于这个的想法吗?
注意:我使用的是 AngularJS v1.4.5
我正在java中构建一个json对象.我需要将一个函数传递给我的javascript并使用jquery $ .isFunction()进行验证.我遇到的问题是我必须将json对象中的函数设置为字符串,但json对象将周围的引号与对象一起传递,从而导致函数无效.如何在脚本中没有引号的情况下执行此操作.
示例Java
JSONObject json = new JSONObject();
json.put("onAdd", "function () {alert(\"Deleted\");}");
Run Code Online (Sandbox Code Playgroud)
Jquery脚本
//onAdd output is "function () {alert(\"Deleted\");}"
//needs to be //Output is function () {alert(\"Deleted\");}
//in order for it to be a valid function.
if($.isFunction(onAdd)) {
callback.call(hidden_input,item);
}
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?
javascript ×9
eval ×4
json ×3
jquery ×2
angularjs ×1
coding-style ×1
function ×1
java ×1
polymer ×1
security ×1