Come può val () restituire Number?

Nel documento val scritto questa descrizione:

.val () Restituisce: String, Number, Array

Ho provato ad ottenere un Number , ma sembra che ritorni solo una string , c’è qualcosa che sto facendo male?

 $('#gdoron').val('1'); alert($('#gdoron').val() === '1'); // true alert(typeof $('#gdoron').val()); // string. $('#gdoron').val(1); alert($('#gdoron').val() === 1); // false alert(typeof $('#gdoron').val()); // string (not "number"!) 
   

La mia domanda è: come può val() restituire il numero come dice la documentazione? La domanda non riguarda come posso analizzare la stringa.

Alcuni elementi HTML5, ad esempio il progresso;

 alert(typeof $("#prog").val()); // number 
   

L’attributo del value di un input di testo restituirà sempre una stringa. È necessario parseInt il valore per ottenere un numero intero:

 parseInt($('#myInput').val(), 10); 

Ho fatto un po ‘di rapida occhiata in giro, e penso di avere una risposta. Se si guarda all’implementazione della funzione val si può vedere che se è presente un cosiddetto val-hook, se il val-hook restituisce un numero, quel numero verrà restituito così com’è dalla funzione val. Ho trovato questa discussione che suggerisce che i val-hook sono principalmente usati dai plugin per creare controlli personalizzati, come i cursori, ecc., Dove il valore di ritorno “naturale” di val potrebbe essere un numero intero. Spero che questo getti un po ‘di luce sulla tua domanda.

Potresti semplicemente creare un plugin jquery da usare al posto di val () per farlo. Qui creo la funzione nval () da utilizzare al posto di val () durante il recupero di un valore di elementi.

 $.fn.nval = function() { return Number(this.val()) }; 

Quindi nel codice basta usare quanto segue per ottenere il valore come numero

 $('#elementID').nval()