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?![]()
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?![]()
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
Dunque, la espressione che usi è pericolosa: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?![]()
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
Sei stato veramente molto esauriente e gentile.
Ora mi è tutto chiaro.
Grazie mille a tutti
Marco