javascript - Array/String lastIndexOf inconsistent results -
code self describing
[3, 1, 3].lastindexof(3) 2 [3, 1, 3].lastindexof(3, undefined) 0 // wtf? //ok, lets compare string '313'.lastindexof(3) 2 '313'.lastindexof(3, undefined) 2 //wow!
different algorithms in spec.
the array version performs tointeger() on second parameter if 1 provided, substitutes 0 nan.
- if argument fromindex passed let n tointeger(fromindex); else let n len-1.
the string version uses tonumber() on second parameter irrespective of whether or not 1 provided, return nan without substitute, algorithm manually substitutes infinity nan.
- let numpos tonumber(position). (if position undefined, step produces value nan).
- returnifabrupt(numpos).
- if numpos nan, let pos +∞; otherwise, let pos tointeger(numpos).
as why, can guess, array version newer of 2 (es5), must have decided nan better off being replaced 0, makes @ least little sense considering falsey evaluation (not it's relevant).
Comments
Post a Comment