Visualizzazione dei risultati da 1 a 6 su 6

Hybrid View

  1. #1
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,780
    (ma non sapevo che su js andasse anche senza dichiararla)
    In JavaScript le variabili non esplicitamente dichiarate vengono dichiarate automaticamente a livello globale, accessibili quindi da qualsiasi ambito di visibilità, cioè da qualsiasi punto nello script.

    Per limitare questo tipo di problematiche si può forzare l'interprete JavaScript ad usare la modalità rigorosa (strict mode).

    Ti è sufficiente inserire la stringa testuale 'use strict'; ad inizio script o ad inizio funzione per attivare questa modalità rispettivamente nell'intero script o per la specifica funzione.

    Questo ti costringe chiaramente ad usare una sintassi più rigida ma ti permette di ottenere, tra le altre cose, un debug più preciso perché vengono segnalati errori (come l'omissione di var, nel tuo caso) che altrimenti, in modalità normale, non verrebbero segnalati.

    Vedi alcuni riferimenti per approfondire:
    Modalità Strict
    Debug veloce con ECMAScript Strict Mode
    Strict mode in Javascript
    Strict mode

    ... Cosa sbaglio?
    Non so ma tutto il passaggio si può semplificare molto. Qui un esempio di come lo imposterei io, usando il metodo map() per ciclare i vari nodiSub.

    codice:
    <script>
       'use strict';
       
       function costruisciExp(str){
          var j = JSON.parse(str)[0];
          console.log(generaAlbero(j));
       }
       function generaAlbero(j){
          return j.valore + (j.nodiSub.length ? '(' + j.nodiSub.map(j=>generaAlbero(j)).join(',') + ')' : '');
       }
       
       var prova = '[{"valore":"DECODE","nodiSub":[{"valore":"TRIM","nodiSub":[{"valore":"DESCRIZIONE","nodiSub":[]}]},{"valore":"\'\'","nodiSub":[]},{"valore":"DOMINIO","nodiSub":[]},{"valore":"TRIM","nodiSub":[{"valore":"DESCRIZIONE","nodiSub":[]}]}]}]';
       costruisciExp(prova);
    </script>
    Non mi pare ci sia molto da spiegare ma se hai bisogno di chiarimenti chiedi pure
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    213
    Quote Originariamente inviata da KillerWorm Visualizza il messaggio
    In JavaScript le variabili non esplicitamente dichiarate vengono dichiarate automaticamente a livello globale, accessibili quindi da qualsiasi ambito di visibilità, cioè da qualsiasi punto nello script.

    Per limitare questo tipo di problematiche si può forzare l'interprete JavaScript ad usare la modalità rigorosa (strict mode).

    Ti è sufficiente inserire la stringa testuale 'use strict'; ad inizio script o ad inizio funzione per attivare questa modalità rispettivamente nell'intero script o per la specifica funzione.

    Questo ti costringe chiaramente ad usare una sintassi più rigida ma ti permette di ottenere, tra le altre cose, un debug più preciso perché vengono segnalati errori (come l'omissione di var, nel tuo caso) che altrimenti, in modalità normale, non verrebbero segnalati.

    Vedi alcuni riferimenti per approfondire:
    Modalità Strict
    Debug veloce con ECMAScript Strict Mode
    Strict mode in Javascript
    Strict mode


    Non so ma tutto il passaggio si può semplificare molto. Qui un esempio di come lo imposterei io, usando il metodo map() per ciclare i vari nodiSub.

    codice:
    <script>
       'use strict';
       
       function costruisciExp(str){
          var j = JSON.parse(str)[0];
          console.log(generaAlbero(j));
       }
       function generaAlbero(j){
          return j.valore + (j.nodiSub.length ? '(' + j.nodiSub.map(j=>generaAlbero(j)).join(',') + ')' : '');
       }
       
       var prova = '[{"valore":"DECODE","nodiSub":[{"valore":"TRIM","nodiSub":[{"valore":"DESCRIZIONE","nodiSub":[]}]},{"valore":"\'\'","nodiSub":[]},{"valore":"DOMINIO","nodiSub":[]},{"valore":"TRIM","nodiSub":[{"valore":"DESCRIZIONE","nodiSub":[]}]}]}]';
       costruisciExp(prova);
    </script>
    Non mi pare ci sia molto da spiegare ma se hai bisogno di chiarimenti chiedi pure
    Grazie ancora per l'ulteriore spiegazione, è una cosa di cui ne terrò mente visto che è molto utile.
    Ero già arrivato alla soluzione ieri ma non ho avuto la linea internet per poterlo comunicare.

    Questo è il mio risultato:
    codice:
    	<script>
    		function costruisciExp(str) 
    		{
    			var j = JSON.parse(str);
    			
    			var risultato;
    			risultato = startBuild(j[0]);
    			console.log(risultato);
    		}
    		
    		function startBuild (ogg)
    		{
    			var n = 0;
    			var stringa = ogg.valore + "(";
    			for (var i=0; i<ogg.nodiSub.length; i++) 
    			{
    				n++;
    				if(ogg.nodiSub[i].nodiSub.length > 0)
    				{
    					stringa += startBuild(ogg.nodiSub[i]);
    				} else
    				{
    					stringa += ogg.nodiSub[i].valore;
    				}
    				if(n != ogg.nodiSub.length)
    					stringa += ",";
    			}
    			
    			stringa += ")";
    			return stringa;
    		}
        
    		var prova = "[{\"valore\":\"DECODE\",\"nodiSub\":[{\"valore\":\"TRIM\",\"nodiSub\":[{\"valore\":\"DESCRIZIONE\",\"nodiSub\":[]}]},{\"valore\":\"''\",\"nodiSub\":[]},{\"valore\":\"DOMINIO\",\"nodiSub\":[]},{\"valore\":\"TRIM\",\"nodiSub\":[{\"valore\":\"DESCRIZIONE\",\"nodiSub\":[]}]}]}]";
    		costruisciExp(prova);
      </script>
    Ma osserverò anche il tuo per poterlo migliorare, grazie.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.