- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 javascript 创建一个动态生成的表单,一切正常,直到我尝试传递一个数组作为参数。当我这样做时,会发生错误。谁能解释一下这是什么?
这是我的代码:
var loadFrm = function(component) {
for(nItem in component) {
var myComponent = "add" + firstToUpper(component[nItem].type);
var callComponent = myComponent + "(" + component[nItem].opt + ");";
eval(callComponent);
}
}
var json = [
{
type: "scale",
opt: {content: [{label: "male", value: "m"}, {label: "female", value: "f"}]}
}
];
loadFrm(json);
编辑这是错误:
missing ] after element list
[Break on this error] addScale([object Object]);
最佳答案
如果您使用调试器查看字符串callComponent
,您可能会发现它看起来像这样:
addScale([object Object])
...which isn't what you want. That's because you're effectively calling toString
on your opt
object, and the default toString
on objects just looks like that. The eval
error is because that's invalid syntax.
Generally speaking, any time you think you need to use eval
, there's almost certainly a better answer. In this case, it looks like you're trying to call a function and pass in opt
. Assuming these functions are "globals", you can do that like this:
var loadFrm = function(component) {
var nItem, functionName;
for (nItem = 0; nItem < component.length; ++nItem) {
functionName = "add" + firstToUpper(component[nItem].type);
window[functionName](component[nItem].opt);
}
}
以上注释:
for..in
循环遍历数组,除非你 really know what you're doing 。 for..in
不枚举数组的索引,而是枚举对象的属性。window[functionName]
按名称查找函数。这是有效的,因为“全局变量”实际上是 window
的属性。对象,并且您可以使用括号表示法使用字符串名称查找属性。window[functionName]
获取该功能,我们直接调用它,传入对象 opt
而不是它的字符串形式。我假设addScale
期望看到一个物体。var
s 到函数的顶部,因为那是它们真正所在的位置 ( details )。addScale
以及相关的函数到它们自己的对象,而不是把它们放在window
上。 window
命名空间已经相当拥挤了。 Here's the live example修改为不向 window
添加任何符号根本不用,而是输入 addScale
名为 functions
的对象上的函数并从那里使用它。离题:语法 var loadFrm = function(component)
创建一个匿名函数,然后将其分配给一个变量。这被经常使用,但除非您根据条件创建不同的函数,例如:
var f;
if (...) {
f = function() { ... };
}
else {
f = function() { ... };
}
...实际上并没有什么用处。 (如果您根据这样的条件创建不同的函数,那么它不仅有用,而且是必要的。)我 recommend using named functions只要有可能,因为带有名称的函数可以帮助您的工具通过在错误消息、调用堆栈等中显示函数名称来帮助您。
离题 2:您有一个名为 json
的变量,但仅供引用,它没有使用 JSON符号。它使用 JavaScript 数组和对象文字表示法的组合,这是 JSON 的超集。你会看到很多人对此感到困惑,我提到它是因为你说你是新人,所以值得将其消灭在萌芽状态。 :-) JSON 纯粹是一种表示法。 (非常有用的一个。)
关于javascript - JS : using eval on a function while trying to pass an array as parameter, 但它抛出一个错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4254118/
在我看来 eval()受到与 goto 相同的蔑视。由 eval ,我的意思是将字符串作为代码执行的函数,如在 PHP、Python、JavaScript 等中看到的。是否有使用 eval() 的情况
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
我有几十个条件(例如,foo > bar)需要在 DataFrame 的 ~1 MM 行上进行评估,最简洁的方法编写此代码是为了将这些条件存储为字符串列表,并创建 bool 结果的 DataFrame
我正在创建一种编译为字节码并在自定义 VM 上运行的小型语言,其架构在很大程度上受到了我所阅读的有关 Python 和 Lua 的影响。有两个堆栈 - 一个存储函数参数、局部变量和临时值的数据堆栈,以
我正在尝试运行此代码: var aaa = await page.$$eval(selector, list => (list, value) => { return reso
我知道标题听起来很复杂,但为了保持动态,这是有目的的;) 示例(请注意,假定这些示例代码位于外部 eval 内) //Ex1 this works eval('function test (){}')
这是交易,我们有一个很大的 JS 库需要压缩,但是 YUI compressor如果发现“eval”语句,它不会完全压缩代码,因为担心它会破坏其他东西。这很好,但是我们确切地知道什么正在被评估,所以我
每门计算机科学类(class)中都讲授过这一点,并且在许多书籍中都写到程序员不应使用 GoTo。甚至还有一个 xkcd关于它的漫画。我的问题是我们是否达到了可以对 Eval 说同样的事情的地步? Go
这两种方法中的一种是否必须被优先使用,还是仅取决于口味? #!/usr/bin/env perl use warnings; use strict; use DBI; my $db = 'sqlite
如果存在“eval()”,uglify 不会破坏变量。命令行: uglifyjs script/script.js --compress --mangle --unsafe/path/to/scrip
我刚刚开始使用 Julia。我正在尝试使用 eval(在 Julia 中)来在函数中定义一组变量。假设我想将 v1 设置为 2: function fun_test(varargs...) v1
这个问题在这里已经有了答案: When is JavaScript's eval() not evil? (27 个答案) 关闭2 年前。 我从未遇到过需要 eval() 的情况。 人们常常说 []
这个问题在这里已经有了答案: "Variable" variables in JavaScript (9 个回答) Use dynamic variable names in JavaScript
好的 - 我有一个非常具体的案例,我需要使用 eval()。在人们告诉我我根本不应该使用 eval() 之前,让我透露一下我知道 eval 的性能问题、安全问题和所有这些问题。我在非常狭窄的情况下使用
我的问题是关于 JavaScript 闭包和 Eval() 函数。 我有一些看起来像这样的代码,还有一些其他 jQuery 插件相关的代码没有显示。如果需要,我可以用更多代码更新问题。 var _Cu
...或者有更好的方法来实现记忆化吗? Function.memoize = function(callableAsString) { var r = false, callable,
当我尝试在jmeter中执行以下代码时: import org.json.JSONArray; import org.json.JSONObject; String jsonString = prev
根据Mozilla docs为了使用 eval 执行函数,它必须被包装在 ( ) 中,即如果您不使用它们,那么它将被视为字符串. eval as a string defining function
标题看起来很蠢,但我不知道如何准确表达,抱歉。 我有一个程序需要评估一些用户代码(通过 RestrictedPython 以确保安全),并且我想将一个函数放入评估的全局变量中,以便它可以在评估时向我打
以下需要在函数范围内,因为在交互式控制台模式下不会发生奇怪的行为。 以下函数按预期返回 5 (function() { var x = 5; return eval("x"); })() 一个简单透明
我是一名优秀的程序员,十分优秀!