Uso del + in Javascript davanti alle variabili nelle funzioni e il ? nelle espressioni regolari

di il
6 risposte

Uso del + in Javascript davanti alle variabili nelle funzioni e il ? nelle espressioni regolari

Ho scaricato del codice relativo ad una funzione da internet scritto da un autorevole esperto di programmazione web. Ci sono due dettagli nel codice della funzione che non comprendo.
1) Perché il programmatore mette sempre un + datanti alle variabili che stanno dentro le parentesi tonde dopo il nome della funzione? Qual è l'utilità di questa pratica? Sapreste farmi un esempio delle circostanze in cui omettendolo potrebbero succedere dei problemi?

    if(isFinite(+decimali) && decimali>-1){
        precisione = decimali;
    }
...

    if(isFinite(+numero) && numero<=(Math.pow(2,53) - 1)){
        n=numero;
    }
2) In questa espressione regolare che comprendo non capisco a cosa serva il punto interrogativo. Per di più omettendolo riesco a rimuovere dalla stringa tutto ciò che non è un numero oppure un punto oppure ancora un trattino di mezzeria. Sapreste farmi notare in quale frangente il ? è essenziale?

    numero = (numero).replace(/[^0-9\.\-]?/gi,"");

6 Risposte

  • Re: Uso del + in Javascript davanti alle variabili nelle funzioni e il ? nelle espressioni regolari

    iBaffiPro ha scritto:


    1) Perché il programmatore mette sempre un + datanti alle variabili che stanno dentro le parentesi tonde dopo il nome della funzione?
    Se ben ricordo (non uso Javascript normalmente) quel + serve per la type coercion. Se xyz contiene una stringa es. '123', +xyz è una espressione numerica. Non cambia ovviamente la variabile ma il valore nella espressione in cui si trova.

    iBaffiPro ha scritto:


    2) In questa espressione regolare che comprendo non capisco a cosa serva il punto interrogativo.
    I costrutti delle espressioni regolari NON sono uguali in tutti i linguaggi, ci sono svariate differenze tecniche e concettuali.
    Ma il ? è uno di quelli ben assodati e indica che il costrutto precedente può esserci oppure no.

    X+ --> X 1...n volte
    X* --> X 0...n volte
    X? --> X 0 o 1 volta

    Questi concetti valgono anche nelle regex in Java (oltre che Javascript).
  • Re: Uso del + in Javascript davanti alle variabili nelle funzioni e il ? nelle espressioni regolari

    1) Non capisco.
    Se clicchi qui:
    https://www.w3schools.com/js/tryit.asp?filename=tryjs_string
    ed incolli questo:
    
    <!DOCTYPE html>
    <html>
    <body>
    <p>La funzione isFinite() restituisce false se il valore è +infinito, -infinity o NaN, altrimenti restituisce true.</p>
    <p>Clicca sul bottone.</p>
    <button onclick="myFunction()">Prova</button>
    <p id="demo"></p>
    <script>
    function myFunction() {
      var x = new String("123");
      var a1 = isFinite(x) + "<br>";
      var a2 = isFinite(+x) + "<br>";
      var b = isFinite(-1.23) + "<br>";
      var c = isFinite(5-2) + "<br>";
      var d = isFinite(0) + "<br>";
      var e = isFinite("123") + "<br>";
      var f = isFinite("Hello") + "<br>";
      var g = isFinite("2005/12/12");
      var res = a1 + a2 + b + c + d + e + f + g;
      document.getElementById("demo").innerHTML = res;
    }
    </script>
    </body>
    </html>
    
    puoi fare delle prove ma ti accorgi che questo + non serve a nulla.
    2) Quello che scrivi mi è noto. E' possibile che per deontologia il programmatore abbia deciso di scegliere di mettere il quantificatore ma che in questo caso non serva assolutamente a nulla?
    
    0 occorrenze > non fare nulla > (?,+,* vanno tutto bene)
    1 occorrenza > sostituisci 1 lettera con nulla > (?,+,* vanno tutto bene)
    n occorrenze > sostituisci n lettere con nulla (+,*) o ogni lettera non nulla (?) > (?,+,* vanno tutto bene)
    
  • Re: Uso del + in Javascript davanti alle variabili nelle funzioni e il ? nelle espressioni regolari

    iBaffiPro ha scritto:


    puoi fare delle prove ma ti accorgi che questo + non serve a nulla.
    Allora: dipende dalla funzione a cui passi il valore. Ci sono funzioni che applicano già una type coercion e altre no.

    La funzione "globale" isFinite fa già internamente una type coercion al tipo numerico. Ma esiste anche Number.isFinite che è una versione più "stretta" e NON applica una type coercion. La sua documentazione su MDN dice:

    In comparison to the global isFinite() function, this method doesn't first convert the parameter to a number.


    Apri i developer tools di Firefox (o Chrome) e vai nella Console dove puoi scrivere espressioni js.

    Number.isFinite("0")
    dà false, perché NON è un Number.

    Ma:
    Number.isFinite(+"0")
    dà true (qui ho fatto IO la type coercion a Number prima di passarlo alla funzione)

    Quindi dipende solo dal contesto in cui si usa la espressione +xyz.

    iBaffiPro ha scritto:



    2) E' possibile che per deontologia il programmatore abbia deciso di scegliere di mettere il quantificatore ma che in questo caso non serva assolutamente a nulla?
    Infatti. Anche secondo me non serve a nulla. Per un motivo molto semplice: l'obiettivo voluto era sostituire con "" (vuoto)
    Ma sarebbe diverso se l'obiettivo fosse sostituire con qualcos'altro, ad esempio un bel "#"

    Sempre dalla Console dei developer tools:

    Con ? :

    "1234ciao-".replace(/[^0-9\.\-]?/gi, "#")

    "#1#2#3#4#####-#"

    Ma senza ? :

    "1234ciao-".replace(/[^0-9\.\-]/gi, "#")

    "1234####-"

    vedi le differenze?


    P.S. chiedi a Toki di spostare la discussione nella sezione Javascript, poiché con Java non ci azzecca nulla ..
  • Re: Uso del + in Javascript davanti alle variabili nelle funzioni e il ? nelle espressioni regolari

    1) Ok tutto chiaro, problema risolto, grazie mille.

    2) Ok tutto chiaro, problema risolto, grazie mille.

    3) Chiedo a Toki, ero convintissimo di aver scritto nella sezione javascript, scusami.
  • Re: Uso del + in Javascript davanti alle variabili nelle funzioni e il ? nelle espressioni regolari

    2> il «?» è inutile nel caso in esame (farebbe il match della stringa vuota)
    per provare le regex, consiglio questo sito
  • Re: Uso del + in Javascript davanti alle variabili nelle funzioni e il ? nelle espressioni regolari

    Grazie
Devi accedere o registrarti per scrivere nel forum
6 risposte