ultimo - javascript slice vs splice
Usando el método Javascript slice() sin argumentos (1)
El método .slice() hace una copia (superficial) de una matriz y toma parámetros para indicar qué subconjunto de la matriz de origen copiar. Llamarlo sin argumentos solo copia toda la matriz. Es decir:
_buffer.slice();
// is equivalent to
_buffer.slice(0);
// also equivalent to
_buffer.slice(0, _buffer.length);
EDITAR: ¿No es obligatorio el índice de inicio? Sí. Y no. Más o menos Las referencias de JavaScript (como MDN ) generalmente dicen que .slice() requiere al menos un argumento, el índice de inicio . Llamar a .slice() sin argumentos es como decir .slice(undefined) . En el ECMAScript Language Spec , el paso 5 en el algoritmo .slice() dice "Let relativeStart be ToInteger(start) ". Si observa el algoritmo para la operación abstracta ToInteger() , que a su vez usa ToNumber() , verá que termina convirtiendo undefined a 0 .
Aún así, en mi propio código, siempre diría .slice(0) , not .slice() - para mí parece más nítido.
Actualmente estoy leyendo este plugin de enmascaramiento de jquery para tratar de comprender cómo funciona, y en numerosos lugares el autor llama a la función slice() sin pasarle ningún argumento. Por ejemplo, aquí la variable _buffer es slice() d, y _buffer.slice() y _buffer parecen contener los mismos valores.
¿Hay alguna razón para hacer esto o el autor está haciendo que el código sea más complicado de lo que debería ser?
//functionality fn
function unmaskedvalue($input, skipDatepickerCheck) {
var input = $input[0];
if (tests && (skipDatepickerCheck === true || !$input.hasClass(''hasDatepicker''))) {
var buffer = _buffer.slice();
checkVal(input, buffer);
return $.map(buffer, function(element, index) {
return isMask(index) && element != getBufferElement(_buffer.slice(), index) ? element : null; }).join('''');
}
else {
return input._valueGet();
}
}