Javascript如何处理函数参数

时间:2012-06-04 16:38:47

标签: javascript function parameters

我最近遇到了一些与我的编程背景的每个骨头相对应的javascript问题。 Javascript经常给我这样做,所以我并不感到惊讶。

我有这样的功能......

function x(param1, booleanParam, arrayParam){
    ....
}

我收到运行时错误,指出arrayParam.length未定义。在调试时,我看到这是真的,并找出原因。结果我忘记了函数调用中的逗号......

x(param1, true [arrayJunk]);

我遇到的问题是弄清楚为什么要打这个电话?为什么这不是编译错误,Javascript如何看待这个并思考,“是的,这似乎可能有用!”

提前感谢你们可以分享的任何启示!

4 个答案:

答案 0 :(得分:3)

这是一个索引表达式 它的语法与someArray[someIndex]相同。

它将最终传递undefined作为第二个参数,除非arrayJunk恰好是布尔基元的属性名称。

答案 1 :(得分:2)

以下是:

  • JavaScript引擎将true转换为Boolean对象(不是原始对象)
  • 然后尝试从该对象
  • 访问存储在arrayParam中的属性名称
  • 属性不存在,因此返回undefined

如果arrayParam是字符串"toString",它将返回一个函数对象

答案 2 :(得分:0)

在这种情况下,表达式被解释为索引。与

基本相同
someArray[42]

因此它被视为具有2个参数而不是3个

的函数调用

答案 3 :(得分:0)

许多动态语言都不会检查您是否向函数传递了太多或太少的参数。

虽然这有时会掩盖错误,但它也允许您滚动自己的defalut参数方案。