首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

splice 参数有关问题

2012-11-22 
splice 参数问题splice 在 ie 与 firefox,chrome之间表现不太一致,希望大家以后也小心一点,今天遇到记录一

splice 参数问题

splice 在 ie 与 firefox,chrome之间表现不太一致,希望大家以后也小心一点,今天遇到记录一下:

?

[1,2,3].splice(1)

?

ie下运行后变为 [1,2,3] ,相当于

?

[1,2,3].splice(1,0)

?

firefox ,chrome运行后变为 [1],相当于

?

[1,2,3].splice(1,[1,2,3].length-1)

?

这就涉及到了 splice第二个参数的默认值问题,看看 ECMA-262-5th 规范


Array.prototype.splice (start, deleteCount [ , item1 [ , item2 [ , … ] ] ] )


The length property of the splice method is 2.


证明 splice 函数申明有两个形参 start 与 deleteCount ,当调用者忽略deleteCount则deleteCount为undefined,那么看一下具体对于deleteCount的处理:


Let actualDeleteCount be min(max(ToInteger(deleteCount),0), len – actualStart).


而 ToInteger又依赖调用了 ToNumber


1.Let number be the result of calling ToNumber on the input argument.
2.If number is NaN, return +0.
3.If number is +0, ?0, +∞, or ?∞, return number.
4.Return the result of computing sign(number) * floor(abs(number)).


最后 ToNumber则规定 当遇到Undefined时返回NaN,那么ToInteger返回0,那么最后 actualDeleteCount为 0


则 IE表现为符合标准的正确行为,不知道为何 firefox,chrome没有遵从标准.



ps:在 OReilly.JavaScript.The.Definitive.Guide.5th.Edition 中支持firefox,chrome的做法:


array.splice(start, deleteCount, value, ...)


deleteCount

The number of elements, starting with and including start, to be deleted from array. This argument is optional; if not specified, splice( ) deletes all elements from start to the end of the array.

不解

?

?

?

?

?

?

?

?

?

1 楼 feipigzi 2012-08-06   w3c 标准 :如果删除数量不指定,则默认删除开始位置后面的所有元素

热点排行