650*_*502 4 javascript firefox google-chrome
我发现处理方式有所不同
[1,2,3].slice(1, undefined)
Run Code Online (Sandbox Code Playgroud)
chrome(返回[2,3])和firefox(返回[])之间.
当然,两者都同意[2, 3]作为的价值
[1,2,3].slice(1)
Run Code Online (Sandbox Code Playgroud)
他们也同意[]作为的价值
[1,2,3].slice(1, null)
Run Code Online (Sandbox Code Playgroud)
哪两个是正确的?或者可能是标准中没有明确规定?
7.如果端是未定义的,让relativeEnd是len个 ; 否则让relativeEnd成为ToInteger(结束).
您使用的是哪个Firefox版本?Firefox 5正确地给了我[2, 3].更新: Firefox 3.6确实返回一个空数组.
我不知道这里有什么问题,因为如果你打电话slice()没有第二个参数,end也会undefined.
更新:
逛了一下打后,似乎是返回一个空数组,如果传递给第二个参数.slice()是NaN.示例(+undefined返回NaN):
> [1,2,3].slice(1, +undefined)
> []
Run Code Online (Sandbox Code Playgroud)
这在Firefox和Chrome中都是一样的.
不幸的是,这也不符合规范,因为ToInteger(NaN) [spec]应该返回0,所以实际上应该将数组切片到最后.
我并不是说这就是为什么它在某些Firefox版本中无法正常工作的原因,我不知道实现.
轻微迷失方向的事件......没关系.
我不确定这是否在标准上定义,但我可以告诉你这是一个棘手的调用.就像菲利克斯所说,这不是标准行为,但我可以想到为什么会这样.
您可能知道的undefined是设置为调用函数时未提供的参数的值.但是,在您的示例中,您实际上是在传递undefined,因此传递的参数实际上是两个并反映在其中arguments.length.
因此,从您所说的内容中可以很容易地想到,在Chrome中,第二个参数正在进行检查,typeof param2 == "undefined"并在Firefox中使用arguments.length > 1.因此,并非(完全)认为Firefox错误,就像Felix建议的那样,他们只是假设undefined永远不会直接作为第二个参数传递.
你可能会遇到这样的情况undefined,我建议你不要使用它!
| 归档时间: |
|
| 查看次数: |
167 次 |
| 最近记录: |