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();
}
}