Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 14 su 14
  1. #11
    Chiedo scusa..ma per vedere se quell'istruzione sia accettata o meno dal browser in uso..non sarebbe più corretto utilizzare il typeof? Ad esempio:
    if(typeof document.body.all.tags != "undefined"){ ecc ecc..
    Cosa ne dite?

  2. #12
    Diciamo, per farti capire, che ogni espressione ritorna qualcosa, qualcosa che ha un valore booleano sempre interpretabile come true o false

    if(1){/*fai qualcosa*/}

    è una espressione valida, e siccome 1 è un valore certamente esistente, esegue la espressione fra graffe.

    if(0){/*fai qualcosa*/}

    è una espressione valida, ma siccome 0 è un valore "inesistente", non esegue mai la espressione fra graffe.

    I valori che equivalgono a "false" sono
    false
    0
    undefined
    null
    una stringa vuota (senza nemmeno spazi bianchi)
    talora NaN

    Non c'è un perchè: nella logica binaria, questo è convenzionalmente la maniera in cui stanno le cose.

    Ora, a te possono sembrare inutili alcune espressioni, ma il fatto che ora ti sembrino tali, non significa che in futuro tu non incorra in situazioni in cui invece ti accorgerai che possono tornare utili, ed allora le capirai.

    Ad esempio
    if(document.getElementById)

    non è affatto una espressione inutile e apporla NON significa sapere che esiste. Attualmente tutti i browser riconoscono document.getElementById però sono esistite fasi di transizione, anni fa, in cui alcuni browser riconoscevano document.getElementById altri, più obsoleti ma usati da una certa platea di utenti, ancora no. Per cui sapere se un browser che vede la tua pagina riconosce o meno document.getElementById era ESSENZIALE prima di imporgli uno script che utilizzava gli attributi e i metodi di document.getElementById

    if(document.getElementById || document.getElementByTagName)
    è una espressione sbagliata: innanzi tutto ci vuole un s:
    if(document.getElementById || document.getElementsByTagName)
    poi, se un browser riconosce getElementById allora ti riconosce pure getElementsByTagName: basterebbe controllarne una sola.

    Allo stato attuale un controllo come
    if(document.getElementById)
    è superfluo, ormai. Ma è importante lo stesso che tu capisca il concetto: prima di utilizzare una classe, può essere opportuno verificare che il browser riconosca tale classe

    Quanto ad "undefined" è il tipo di dato (equivalente a false) che viene tipicamente restituito quando stai controllando una qualche proprietà che in realtà non esiste - i motivi per cui non esiste sono molteplici, il più tipico però è un errore del programmatore che si mette ad invocare delle proprietà senza essersi assicurato prima che esistano magari perchè si è dimenticato di crearle prima di manipolarle.

    Se stai imparando Javascript comunque ti importa solo capire che nelle espressioni condizionali tutti i parametri vengono controllati per la loro verità/falsità (true/false)

    if(134 && 0) //FALSE
    if("ciao") //TRUE
    if("") //FALSE
    if(null) //FALSE
    if(false) //FALSE
    if(true) //TRUE
    if(true && false)//FALSE
    if(true && 28) // TRUE
    if(true || 28)//TRUE
    if(true || false) //TRUE

    sono esmepi, ma se sostituisci a quegli elementi delle espressioni javascript che ne detengono i valori, il risultato è lo stesso
    var ciao="ciao";
    var numero=0;
    if(ciao && numero)//FALSE

    Nota che 0 è false ma "0" fra virgolette sarebbe true perchè non è più un numero ma una stringa, e non è stringa vuota ma stringa che include un dato: concetto "sottile" che di solito sconcerta i nuovi.

    buono studio (sui libri!) ciao

  3. #13
    Originariamente inviato da marco476
    Chiedo scusa..ma per vedere se quell'istruzione sia accettata o meno dal browser in uso..non sarebbe più corretto utilizzare il typeof? Ad esempio:
    if(typeof document.body.all.tags != "undefined"){ ecc ecc..
    Cosa ne dite?
    Dunque, la espressione che usi è pericolosa:

    if(document.body && document.body.all) sarebbe corretta, semmai
    Le espressioni che controllano a questa maniera devono essere le più conservative possibile. E' inutile che controlli
    document.body.all.tags
    se il browser già non ti riconosce
    document.body
    se parti subito con
    document.body.all.tags
    ogni browser che non ti riconosce document.body ti lancia errore appena controlli document.body.all e ti manda in palla lo script.

    Quanto ad usare typeof anzichè il valore booleano della espressione, ci sono per fortuna diversi modi di ottenere la stessa cosa in programmazione.
    Il metodo che segnali vab bene, ma è meglio che ti abitui a quello booleano perchè typeof è espressione che ha senso solo in javascript, mentre il controllo per parametri booleani ha senso in qualsiasi linguaggio di programmazione, per cui tanto vale abkituarsi subito con le buone abitudini

  4. #14
    Sei stato veramente molto esauriente e gentile.
    Ora mi è tutto chiaro.
    Grazie mille a tutti

    Marco

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.