【发布时间】:2011-08-10 05:26:59
【问题描述】:
我正在尝试使用函数可用的“参数”变量来枚举传递给函数的参数,在 Javascript 中,使用:
for (var i in arguments){
...
}
这似乎适用于我在 chrome 和 firebug 控制台中,而不适用于 Rhino。使用前两个,我可以成功进入for循环并查看参数,而使用后者,似乎甚至没有进入for循环。
为什么会发生这种情况,我该如何防止这种情况发生?
【问题讨论】:
-
你能确认 arguments 包含你认为的值吗?
-
我会期望从
arguments评估的对象至少具有length和caller和callee属性...因为这些是需要每个规范。请注意,for(var x in arrLikeThing)形式通常是不正确的代码。与for(var i = 0; i < argumets.length; i++) { var arg = arguments[i]; ... }比较。 -
嗨 Thilo,是的 - 这是来自我的终端的 sn-p:
abhinav@abhinav:~/js_codes$ cat testfunc.js function main(){ for(var i in arguments) print(i); } a = main("javascript", "rocks"); abhinav@abhinav:~/js_codes$ rhino testfunc.js abhinav@abhinav:~/js_codes$ -
但是(对于海报),FF5 中的
function x () { var i = 0; for(var x in arguments) { i++ }; return i }; alert(x(...))将返回 0,其中 ... 是 `` 和 1,其中 ... 是"hello",等等。第一条评论具有误导性;仅仅因为一个对象有一个属性并不意味着该属性必须用for...in枚举。我不确定规范说的是什么。arguments在此。 (看看上面的代码如何在 Rhino [例如在 FF 之外] 运行会很有趣。) -
对答案感兴趣的朋友,stackoverflow.com/questions/4824207/…这回答了这个问题。
标签: javascript linux rhino jvm-arguments enumerate