2015-08-25 9 views

risposta

8

Solo così abbiamo un esempio di lavorare da, questo è abbastanza comune con jQuery di $.each in cui si sta scrivendo il codice che non ha bisogno l'indice, proprio il valore, nella richiamata iterazione ($.each è arretrato rispetto al Array#forEach):

$.each(objectOrArrayLikeThing, function(_, value) { } 
    // Use value here 
}); 

Utilizzando _ è il più vicino che ho visto ad un modo standard per farlo, sì, ma ho anche visto un sacco di altri   — dandogli un nome riflettente del suo scopo in ogni caso (index), chiamandolo unused, ecc.

6

L'utilizzo di _ è standard, probabilmente in base a quanti sviluppatori JS utilizzano anche Ruby.

Si noti che in Ruby, non si utilizza nomi di variabili a partire da _ di ignorare i parametri - come quelli sono nomi di variabili validi - ma _ , che non è una variabile, ma un buco nero . def f(_, _, x) è valido (ignorando due argomenti); def f(_a, _a, x) non valido (due parametri hanno lo stesso nome); def f(_a, _b, x) puts _a, _b, x end; f(1, 2, 3) emette tutti e tre i numeri.

È possibile fare la stessa cosa in JavaScript con qualsiasi variabile - JavaScript vede nulla di sbagliato nel ripetere i nomi dei parametri: function a(a, a, x) { return [a, x]; } è una dichiarazione valida, con i valori più tardi sovrascrivendo quelli precedenti: a(1, 2, 3) rendimenti [2, 3]. _ è solo un altro nome di variabile in JavaScript, senza alcuna gestione speciale.

EDIT: Grazie Andrew Grimm per una buona referenza su _ in Ruby.

+0

Per lo stato di '_' in Ruby, c'è http://stackoverflow.com/questions/9559561/where-and -come-è-il-underscore-variabile-specificata –

+0

@AndrewGrimm: Ah, buona scoperta. Grazie. – Amadan

+5

* "JavaScript non vede nulla di sbagliato nel ripetere i nomi dei parametri" * Per tua informazione non è valido [dal 2009] (http://ecma-international.org/ecma-262/5.1/#sec-13.1) se utilizzi la modalità rigorosa (e non usare la modalità rigorosa è ... beh ... diciamo solo: usa la modalità rigorosa :-)). Esempio: https://jsfiddle.net/L9rc23xm/ –

9

Con i browser di supporto destrutturazione si può fare:

function ({}, {}, value) { 
    // ...value 
} 

che è una specie di pulito in quanto evita il problema di molteplici argomenti che hanno lo stesso nome e, inoltre, non creerà problemi con le librerie che assegnano i metodi per _ (lodash, trattino basso, ecc.).

+1

Sfortunatamente, questo genera se un argomento non utilizzato è 'indefinito' o' null'. –

+0

@OlegsJeremejevs 'function ({} = {}, {} = {}, valore) {...}' aiuta qui, ma diventa complicato ... – oluckyman

+0

@oluckyman Bella soluzione! "Non voglio nominare un argo non usato? Basta manometterlo!" –

Problemi correlati