En utilisant le Javascript de la méthode slice() sans arguments
Je suis en train de lire à travers ce jquery plugin de masquage à essayer de comprendre comment il fonctionne, et dans de nombreux endroits, l'auteur appelle le slice()
fonction passant pas d'arguments pour elle. Par exemple ici la _buffer
variable est slice()
d, et _buffer.slice()
et _buffer
semblent les mêmes valeurs.
Est-il une raison pour faire cela, ou est l'auteur vient de rendre le code plus compliqué que ce qu'il devrait être?
//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();
}
}
- Aucun programmeur compétent aurait jamais de rendre le code plus compliqué qu'il doit être.
- Elle est nécessaire. Le
slice
méthode est utilisée au début de la fonction de sauvegarde de l'original éléments de tableau avant d'être modifié par la fonction, de cette façon, l'auteur a accès à des postes, des clés et des valeurs du tableau d'origine, même après et pendant l'édition du tableau. C'est indispensable lors d'un responsable de la chaîne de la manipulation de l'interface, comme votre exemple de plugin. En complétant sur @alex commentaire, si il y est, il y a une raison pour cela. Ctrl+F de la source et de chercher où il est accessible à plus tard si vous avez besoin d'une meilleure compréhension. //functionality fn
?
Vous devez vous connecter pour publier un commentaire.
La
.slice()
méthode fait (peu profonde) copie d'un tableau, et prend des paramètres pour indiquer quel sous-ensemble du tableau source pour la copie. L'appelant sans arguments, juste des copies de l'ensemble de la matrice. Qui est:EDIT: N'est-ce pas le début de l'indice est-elle obligatoire? Oui. Et pas de. En quelque sorte. JavaScript références (comme MDN) l'habitude de dire que
.slice()
nécessite au moins un argument, le commencer index. L'appel de.slice()
sans arguments, c'est comme dire.slice(undefined)
. Dans le Langage ECMAScript Spec, à l'étape 5 de la.slice()
algorithme dit "LaissezrelativeStart
êtreToInteger(start)
". Si vous regardez l'algorithme pour le résumé de l'opérationToInteger()
, qui à son tour utiliseToNumber()
, vous verrez qu'il finit par se convertirundefined
à0
.Encore, dans mon code je dis toujours
.slice(0)
, pas.slice()
- pour moi, il semble plus soignée.a = {}; b = a;
- maintenanta
etb
les deux font référence au même objet, donc si vous ditesa.x = 1
puisb.x
sera de retour1
.