2011-02-03 19 views
13

Come posso rilevare se una variabile è una stringa?come rilevare se la variabile è una stringa

+0

Si potrebbe desiderare di utilizzare underscore.js, ha metodi per questo costruito in http: //documentcloud.github.com/underscore/# isString - in caso di isString usa il metodo menzionato dall'utente113716 –

+0

possibile duplicato di [Controlla se una variabile è una stringa] (http://stackoverflow.com/questions/4059147/check-if-a- variabile-is-a-string) – pkyeck

+0

possibile duplicato di [Controllare se la variabile è numero o stringa in javascript] (http://stackoverflow.com/questions/1303646/check-whether-variable-is-number-or-string- in-javascript) – Flimzy

risposta

30

questo è il modo specificato nelle specifiche ECMAScript per determinare la proprietà interna [[Classe]].

if(Object.prototype.toString.call(myvar) == '[object String]') { 
    // a string 
} 

From 8.6.2 Object Internal Properties and Methods:

Il valore della [[Categoria]] struttura interna è definita da questa specifica per ogni tipo di oggetti incorporata. Il valore della proprietà interna [[Classe]] di un oggetto host può essere qualsiasi valore Stringa tranne uno di "Argomenti", "Array", "Booleano", "Data", "Errore", "Funzione", "JSON "," Math "," Numero "," Oggetto "," RegExp ", e " String ". Il valore di una proprietà interna [[Classe]] viene utilizzato internamente per distinguere diversi tipi di oggetti. Si noti che questa specifica non fornisce alcun modo per un programma di accedere a tale valore tranne tramite Object.prototype.toString (vedere 15.2.4.2).


Per un esempio di come questo sia utile, si consideri questo esempio:

var str = new String('some string'); 

alert(typeof str); // "object" 

alert(Object.prototype.toString.call(str)); // "[object String]" 

Se si utilizza typeof, si ottiene "object".

Ma se si utilizza il metodo di cui sopra, si ottiene il risultato corretto "[object String]".

+8

non so perché questa sia la risposta accettata. gli oggetti non sono archi. 'new String()' produce un oggetto contenente una serie di proprietà indicizzate, ciascuna con un valore corrispondente al carattere in quella posizione. Sì, verrà forzato in una stringa tramite il metodo 'toString' di' Object', ma resta il fatto che 'new String ('some string')' non è una stringa, in sé e per sé. 'typeof someString ===" string "' è il modo corretto per determinare se una variabile è una stringa. Se una variabile può essere * trasformata in * una stringa è discutibile; ogni oggetto che può tracciare la sua catena prototipo in 'Object' ha' toString' – jackwanders

16

È possibile utilizzare typeof di farlo, ma per un sacco di cose questo è cattivo design.

if (typeof myVar == "string") { 
    alert("I'm a string!"); 
} 
+5

Cos'è un buon design? – Webnet

+0

Dipende da cosa stai cercando di fare. In genere dovresti sapere che tipo stai ricevendo o non dovrebbe avere importanza (ad esempio, dovrai fare la stessa cosa indipendentemente dal tipo). –

+0

come usare isNaN()? –

0

typeof('yourstring');// returns string

4

Utilizzare typeof.

if (typeof foo == 'string') 
+19

Probabilmente è più chiaro non utilizzare le parole chiave come variabili negli esempi. – crdx

0

Utilizzare alert(typeof "hello"); alert(typeof 123);

Ref .: here.

3
var str = new String("some string"); 
if(str.constructor.name === "String") 
    { 
     alert("I'm a string!"); 
     } 

o semplicemente:

if(str.constructor === String) 
    { 
     alert("I'm a string!"); 
     } 
2

Non penso che abbiamo bisogno di trattare new String('some string') come una stringa, perché se proviamo:

new String('abc')==='abc' 

Si ritornerà falso!

Ma se proviamo:

String('abc')==='abc' 

Si restituirà true.

0
('str'.constructor === String) && alert('its a string!'); 
Problemi correlati