2012-07-20 17 views
6

Volevo controllare se una variabile in uno Script di Apps era una stringa, ma ho trovato che instanceof non restituiva true quando la variabile era in effetti una stringa. Il seguente test:instanceof String non si comporta come previsto in Google Apps Script

function test_instanceof() { 
    var a = "a"; 
    Logger.log('"a" is ' + ((a instanceof String) ? '' : 'not ') + 'a String'); 
    var b = String("b"); 
    Logger.log('String("b") is ' + ((b instanceof String) ? '' : 'not ') + 'a String'); 
} 

registra questi due messaggi:

"a" is not a String 
String("b") is not a String 

I documenti non sono chiare sul sottoinsieme di ECMAScript che è supportato, anche se apparentemente instanceof è un operatore valido e String è una valida tipo, a giudicare dal fatto che il codice eseguito senza eccezioni.

Qual è il modo appropriato per verificare il tipo di una variabile?

risposta

7

E 'standard ECMAScript 3.

Il codice sta facendo quello che si aspetta JavaScript: si veda qui per la equivalent JavaScript running in your browser.

Instance di verifica per un costruttore corrispondente nella catena del prototipo. Ciò è positivo per gli oggetti creati con 'nuovo' ma non molto utili per le stringhe. Quello che vuoi realmente per String è typeof, come mostrato in this example in your browser o il codice Script Apps equivalente:

function test_instanceof() { 
    var a = "a"; 
    Logger.log('"a" is ' + ((typeof a == 'string') ? '' : 'not ') + 'a String'); 
    var b = String("b"); 
    Logger.log('String("b") is ' + ((typeof b == 'string') ? '' : 'not ') + 'a String'); 
} 
+0

Doh! Ho chiaramente speso troppo tempo a scrivere Python ultimamente e ho dimenticato questo dettaglio di JavaScript. Grazie per l'aggiornamento. –

Problemi correlati