2012-01-11 16 views
18

C'è un'idea in giro che "alert() è male"."Alert is bad" - davvero?

Ringraziamenti:

  • Certo, raramente vogliono usarlo in un design attuale interfaccia utente dal momento che ci sono modi migliori per comunicare con gli utenti.
  • Per il debug, console.log() ha molto più valore di alert().
  • Alcune situazioni (ad esempio l'uso di setTimeout) si verificano quando alert() interferisce.
  • I debugger effettivi gestiscono la pausa e riprendono l'esecuzione molto meglio di alert(), se è ciò di cui uno sviluppatore ha bisogno.

Domande:

  1. c'è una ragione logica solida per mai uso alert()?
  2. Il valore aumentato di console.log() riduce veramente il valore di alert() così drasticamente che passa da "utile in scenari limitati" a "cattivo"?
  3. Cosa si dice a qualcuno che desidera utilizzare alert() in un breve test in cui la registrazione non è impostata e gli eventuali effetti collaterali sono irrilevanti (si pensi a tutorial o prototipi rapidi)?
+6

Non ho mai sentito parlare di questa idea in questa totalità - si può citare una fonte? Ri 3.) usarlo. Non c'è niente di sbagliato in 'alert()' tranne per ciò che riconosci sopra. –

+0

Puoi condividere qualche riferimento sull'idea che "alert() è cattivo"? – maerics

+0

@Pekka: sembra che dovresti fare una risposta a quel commento. :) –

risposta

8
  1. No, è solo una caratteristica del linguaggio e non v'è alcun motivo per mai uso alert().
  2. alert() funziona diversamente rispetto console.log(), anche console non è sempre disponibile, così console.log() può ridurre il valore di alert(), ma sicuramente non può sempre essere sostituito.
  3. Spiegare come console.log() differisce da alert(), in particolare quella uscita alert() must della stringa, quindi deve prima convertire il valore a stringa - è molto importante se si desidera controllare quale valore si ha ad un certo punto e hai scelto alert() per adempiere a questo compito. Arresta anche l'esecuzione dello script (a volte può essere utile).

Altri link:

+0

beh, non è proprio un "linguaggio", ma immagino che sia comunque pignolo. – jAndy

+0

@zizozu: le tue risposte a 1 e 2 trattano abbastanza bene 3. –

+0

'console.log (x.toString())' >>> 'alert (x)' – Raynos

3

Questo è alla pari con il "non utilizzare le tabelle" bit. È un'iperbole mirata a ridurre il numero di istanze per questo design estremamente scadente. È considerato un cattivo design perché impedisce ulteriori azioni del browser (come il pulsante Indietro) e l'esecuzione del codice (JavaScript aggiuntivo e rendering della pagina) finché l'utente non fa clic sul pulsante "ok". L'etichetta "ok" su quel pulsante non può essere modificata ed è inappropriata per la maggior parte dei casi d'uso.

Esistono modi migliori per visualizzare informazioni di errore, azioni di controllo di integrità e finestre di dialogo di conferma, quindi utilizzarle.

Esistono casi di utilizzo "corretti", ad esempio quando è necessario interrompere il normale flusso di pagine per qualche motivo ed è pericoloso (sicurezza) continuare a caricare le pagine. Non riesco a pensare a molti esempi specifici, ma sono là fuori ai margini. Da qualche parte.

+0

Adoro il commento: "Ci sono" casi d'uso "appropriati ... là fuori ai margini. :) –

+1

Questi casi d'uso "corretti" sono meglio eseguiti con "conferma", quindi "avviso" – Raynos

+0

@ Raynos - concordato. Ci deve essere un caso d'uso valido per 'alert()' che è unico per esso. –

1

si sta interrompendo l'utente- se ha molte schede aperte e si avvisa che è improvvisamente diretto alla scheda .. Un dolore nel culo per me come utente. questa è la più grande preoccupazione per me ..

detto che console.log non funziona in tutti i browser IE7, perché uno non supporta lo stesso.

L'avviso di utilizzo corretto va bene fintanto che è chiaro perché è presente un avviso.

anche l'avviso non è utile per registrare gli oggetti JS è possibile visualizzare solo le stringhe.

21

Esiste un motivo logico solido per non utilizzare mai alert()?

avviso è male semplicemente perché non ha caratteristiche positive e uniche caratteristiche negative

  • blocchi l'intero browser
  • blocca il filo javascript
  • solo stampe stringhe
  • richiede l'interazione dell'utente per continua (ciò significa che non puoi automatizzare l'utilizzo del browser)
  • è bloccato dai comuni blocchi popup
  • non funziona in ambienti non del browser come node.js (tuttavia console.log funziona in node.js)

fa il maggior valore di console.log() riducono veramente il valore di alert() così drasticamente che passa da "utile in scenari limitati" a "cattivo"?

Sì, anche se ci sono alcune eccezioni

L'unico avviso valore ha è come strumento hackish rapido al browser di debug legacy o come strumento per infastidire gli utenti.

+3

Blocca javascript e l'interfaccia utente perché entrambi eseguono lo stesso thread. +1 – jAndy

+3

@Raynos: Grazie per il tentativo, ma "È male perché non so perché è buono" non è un motivo logico per non usarlo mai. –

+6

@JohnFisher nessun avviso è negativo perché blocca l'intero browser _e_ non vi è alcun motivo valido per utilizzarlo. Seriamente perché lo useresti, mai. – Raynos

0

Bene, sembra che tu abbia risposto alle tue domande con il tuo primo elenco di motivi.

C'è una ragione logica solida per mai avviso uso?

Quando eseguire il debug dei siti? Sì, non utilizzare mai alert().

Mai e poi mai? Forse troppo lontano. Ma, per la maggior parte degli utenti, alert() provoca rabbia e frustrazione. Non sono mai stato in un sito dove ero contento hanno interrotto la mia visita con una finestra di dialogo di avviso.

fa il maggior valore di console.log() ridurre veramente il valore della alert() in modo così drastico che va da "utile in scenari limitati" a "cattivo".

Nel contesto delle applicazioni di debug sono d'accordo, alert() è male. Posso fornire molte più informazioni in un console.log(), un intero oggetto JavaScript che descrive molte informazioni. Semplicemente non c'è tanta flessibilità nei messaggi visualizzati in una casella di avviso.

Cosa dici a qualcuno che vuole utilizzare alert() in un breve test in cui la registrazione non è messa a punto e gli eventuali effetti collaterali sono irrilevanti (si pensi tutorial o prototipi rapidi)?

In realtà non è molto più difficile da digitare console.log() rispetto al alert(). Ottieni molte informazioni molto più utili e stai innescando la tua "memoria muscolare" per buone pratiche. Se usi le buone pratiche per tutto il tempo, verranno spontaneamente a te. Se usi le cattive abitudini per tutto il tempo, arriveranno naturalmente anche a te.

In fin dei conti dipende da cosa stai facendo. Stai eseguendo il debug? O stai cercando di comunicare all'utente? Queste sono due cose diverse che richiedono approcci diversi.

1

A scopo di debug, alert può essere talvolta controproducente, ma è immediato. Il problema con l'utilizzo di alert in scenari di debug è che interrompe il flusso del programma. Considerando che console.log benefici dal consentire il flusso del programma per continuare.

Quello che devi nudo in mente, però, è che console.log non è una proprietà standard di window, esiste perché gli strumenti di terze parti come Firebug, Inspector e IE Developer Tools estendere l'oggetto window con l'istanza console oggetto. Se finisci lasciando le dichiarazioni console.log nel tuo codice quando non stai eseguendo qualcosa come Firebug, può causare il fallimento degli script.

L'utilizzo di alert nel codice in tempo reale sembra essere disapprovato, ma è perfettamente logico da utilizzare, se questo è il meccanismo con cui si desidera avvisare l'utente. Ad esempio, se tentano di inviare dati non validi, è perfettamente valido lanciare un alert("Please enter XXX");. Naturalmente, se ciò fornisce la migliore esperienza utente è un'altra cosa.

Un'altra cosa da considerare, è che si può sostituire la funzione alert se voluto, per es .:

var oldAlertFunc = window.alert; 
window.alert = function(message) { 
    console.log(message); 
}; 
+1

È come dire "È perfettamente valido spegnere il computer degli utenti quando il programma è finito. Ovviamente, se ciò fornisce la migliore esperienza utente è un'altra cosa." – Raynos

+3

Lol, non proprio la stessa ... grande differenza tra terminare una sessione utente e lanciare una finestra di messaggio. –