相关疑难解决方法(0)

当我的名字作为字符串时,如何执行JavaScript函数

我在JavaScript中将函数的名称作为字符串.如何将其转换为函数指针,以便稍后调用?

根据具体情况,我可能还需要将各种参数传递给方法.

一些功能可能采取的形式namespace.namespace.function(args[...]).

javascript

994
推荐指数
16
解决办法
49万
查看次数

什么时候JavaScript的eval()不是邪恶的?

我正在编写一些JavaScript代码来解析用户输入的函数(用于类似电子表格的功能).解析了公式后,我可以将其转换为JavaScript并eval()在其上运行以产生结果.

但是,eval()如果我可以避免它,我总是回避使用,因为它是邪恶的(而且,无论是对还是错,我一直认为它在JavaScript中更加邪恶,因为要评估的代码可能会被用户改变).

那么,什么时候可以使用它?

javascript coding-style eval

253
推荐指数
9
解决办法
8万
查看次数

用于解析JSON的JavaScript eval()的替代方法

快速问题.JavaScript中的Eval是不安全的,不是吗?我有一个JSON对象作为字符串,我需要把它变成一个实际的对象,所以我可以获取数据:

function PopulateSeriesFields(result) 
{
    data = eval('(' + result + ')');
    var myFakeExample = data.exampleType
}
Run Code Online (Sandbox Code Playgroud)

如果它有助于我使用jQuery中的$ .ajax方法.

谢谢

javascript security jquery json eval

18
推荐指数
4
解决办法
4万
查看次数

解析函数字符串时的JavaScript eval()"语法错误"

我有一些在服务器端的配置文件中指定的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 …

javascript eval function

14
推荐指数
2
解决办法
2万
查看次数

评估JSON字符串 - eval()与新函数()

可能重复:
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()?

请完整关闭

javascript json eval

9
推荐指数
1
解决办法
2489
查看次数

将函数作为属性值传递

我想知道是否可以将函数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)

我一直试图让这个工作多年没有运气.

提前致谢.

polymer

9
推荐指数
1
解决办法
3623
查看次数

具有动态名称的嵌套对象属性

上下文:我正在为我的应用程序设置编写一个 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 bad
Run 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)

这有效,但是

  1. 它很丑
  2. 它不适用于更深层嵌套的对象

有没有一种方法可以在不使用正则表达式或 eval 的情况下使用动态名称访问嵌套对象的属性?

javascript

7
推荐指数
1
解决办法
1975
查看次数

在JavaScript中将变量字符串值转换为表达式

我正在尝试将字符串值转换为表达式,以便我可以在if条件中使用它:

var StringVal = '20 > 18 && "yes" == "yes"';

if(StringVal){

    ....
}
Run Code Online (Sandbox Code Playgroud)

有可能这样做,请建议我.

谢谢

javascript

5
推荐指数
1
解决办法
841
查看次数

使用 AngularJS 执行存储为字符串的 JavaScript 函数

有什么方法可以动态注入存储在 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

javascript angularjs

5
推荐指数
1
解决办法
1503
查看次数

Java不使用引号将函数添加到json对象.

我正在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 java jquery json

4
推荐指数
1
解决办法
3570
查看次数

标签 统计

javascript ×9

eval ×4

json ×3

jquery ×2

angularjs ×1

coding-style ×1

function ×1

java ×1

polymer ×1

security ×1