nl_tokens: For . indexOf we don t need to pass in the number of arguments at the callsite since ToInteger ( undefined ) == 0 ; however for . lastIndexOf we need to pass it since the behavior for passing undefined is 0 but for not including the argument is length - 1 .
pl_tokens: function InnerArrayIndexOf ( array , element , index , length ) { if ( length == 0 ) return - 1 ; if ( IS_UNDEFINED ( index ) ) { index = 0 ; } else { index = INVERT_NEG_ZERO ( TO_INTEGER ( index ) ) ; // If index is negative, index from the end of the array. if ( index < 0 ) { index = length + index ; // If index is still negative, search the entire array. if ( index < 0 ) index = 0 ; } } var min = index ; var max = length ; if ( UseSparseVariant ( array , length , IS_ARRAY ( array ) , max - min ) ) { % NormalizeElements ( array ) ; var indices = % GetArrayKeys ( array , length ) ; if ( IS_NUMBER ( indices ) ) { // It's an interval. max = indices ; // Capped by length already. // Fall through to loop below. } else { if ( indices . length == 0 ) return - 1 ; // Get all the keys in sorted order. var sortedKeys = GetSortedArrayKeys ( array , indices ) ; var n = sortedKeys . length ; var i = 0 ; while ( i < n && sortedKeys [ i ] < index ) i ++ ; while ( i < n ) { var key = sortedKeys [ i ] ; if ( array [ key ] === element ) return <mask> ; i ++ ; } return - 1 ; } } // Lookup through the array. if ( ! IS_UNDEFINED ( element ) ) { for ( var i = min ; i < max ; i ++ ) { if ( array [ i ] === element ) return i ; } return - 1 ; } // Lookup through the array. for ( var i = min ; i < max ; i ++ ) { if ( IS_UNDEFINED ( array [ i ] ) && i in array ) { return i ; } } return - 1 ; }