我最近遇到了一些与我的编程背景的每个骨头相对应的javascript问题。 Javascript经常给我这样做,所以我并不感到惊讶。
我有这样的功能......
function x(param1, booleanParam, arrayParam){
....
}
我收到运行时错误,指出arrayParam.length
未定义。在调试时,我看到这是真的,并找出原因。结果我忘记了函数调用中的逗号......
x(param1, true [arrayJunk]);
我遇到的问题是弄清楚为什么要打这个电话?为什么这不是编译错误,Javascript如何看待这个并思考,“是的,这似乎可能有用!”
提前感谢你们可以分享的任何启示!
答案 0 :(得分:3)
这是一个索引表达式
它的语法与someArray[someIndex]
相同。
它将最终传递undefined
作为第二个参数,除非arrayJunk
恰好是布尔基元的属性名称。
答案 1 :(得分:2)
以下是:
true
转换为Boolean
对象(不是原始对象)arrayParam
中的属性名称
如果arrayParam
是字符串"toString"
,它将返回一个函数对象
答案 2 :(得分:0)
在这种情况下,表达式被解释为索引。与
基本相同someArray[42]
因此它被视为具有2个参数而不是3个
的函数调用答案 3 :(得分:0)
许多动态语言都不会检查您是否向函数传递了太多或太少的参数。
虽然这有时会掩盖错误,但它也允许您滚动自己的defalut参数方案。