Quando la coercizione di tipo è una buona idea?

2

Quando vuoi (apposta) per forzare il tipo in JavaScript? Voglio dire, al di là del confronto tra stringhe e numeri, quando è utile qualcosa che stai costruendo?

Esempi di tipo di coercizione:

"The answer is " + 42 
//=> "The answer is 42"

"37" - 7 
//=> 30

"37" + 7 
//=> "377"

var foo = [0];
console.log(foo == foo);
//=> true

console.log(foo == !foo);
//=> true
    
posta Gina 30.01.2014 - 17:14
fonte

1 risposta

2

Il principio fondamentale che influisce maggiormente sulla coercizione di tipo è essere liberale in ciò che accetti . Per una lingua con tipi di argomenti fanno parte di una firma di funzione, puoi gestire, ad esempio, una funzione log richiedendo string parametri e sovraccarichi per object e integer e whatnot.

In JavaScript, che è così tipicamente digitato che dovresti trattare gli argomenti della funzione semplicemente come un suggerimento di denominazione per i primi argomenti X passati, puoi usare la coercizione per aiutare a gestire rapidamente la maggior parte dei tipi di argomenti. E, naturalmente, è un aspetto fondamentale dell'ispezione delle feature. Considera quanto segue, che prenderà qualsiasi numero di argomenti e passali a console.log come una singola stringa separata da spazio:

function toLog() {
    if(arguments.length && window.console && window.console.log) {
        var ArgString = "";
        for(var a = 0; a < arguments.length; a++) {
            ArgString += arguments[a];
        }
        console.log(ArgString);
    }
}

Quanto sopra utilizza la coercizione del tipo in tre modi che sono estremamente utili per JavaScript:

  1. La proprietà arguments.length viene convertita da un numero in un valore booleano per vedere se ci sono elementi in argomenti pseudo-array .
  2. Sia l'oggetto globale console che il suo metodo log vengono convertiti da oggetti in booleano se non sono nulli, il che impedisce un (vecchio?) bug di IE in cui console.log causerebbe errori se chiamato senza la console di sviluppo aperto.
  3. Impostando ArgString su una stringa vuota "" sull'inizializzazione, segnaliamo all'interprete di forzare tutti gli argomenti anche alle stringhe. Quale non è tutto ciò che è utile su un browser moderno, ma funziona per il nostro esempio.
risposta data 31.01.2014 - 04:26
fonte

Leggi altre domande sui tag