Risposte:
Eri vicino:
if (typeof a_string === 'string') {
// this is a string
}
In una nota correlata: il controllo sopra riportato non funzionerà se viene creata una stringa new String('hello')
come sarà Object
invece il tipo . Ci sono soluzioni complicate per aggirare questo problema, ma è meglio evitare di creare stringhe in quel modo, mai.
if(typeof(str) === typeof(String()))
L' typeof
operatore non è un infisso (quindi l'LHS del tuo esempio non ha senso).
Devi usarlo in questo modo ...
if (typeof a_string == 'string') {
// This is a string.
}
Ricorda, typeof
è un operatore, non una funzione. Nonostante ciò, vedrai typeof(var)
essere usato molto in natura. Questo ha tanto senso quanto var a = 4 + (1)
.
Inoltre, puoi anche usare ==
(operatore di confronto di uguaglianza) poiché entrambi gli operandi sono String
s ( restituisce typeof
sempre a String
), JavaScript è definito per eseguire gli stessi passaggi che avevo usato ===
(operatore di confronto rigoroso).
Come menziona Box9 , questo non rileverà un String
oggetto istanziato .
Puoi rilevarlo con ....
var isString = str instanceof String;
jsFiddle .
...o...
var isString = str.constructor == String;
jsFiddle .
Ma questo non funzionerà in un window
ambiente multiplo (pensa iframe
).
Puoi aggirare questo con ...
var isString = Object.prototype.toString.call(str) == '[object String]';
jsFiddle .
Ma ancora, (come menziona Box9 ), stai meglio usando solo il String
formato letterale , ad es var str = 'I am a string';
.
if(myVar.toUpperCase) alert('I am a string');
:? Vedi: jsfiddle.net/tb3t4nsx
{ toUpperCase: '' }
L'espressione seguente restituisce true :
'qwe'.constructor === String
L'espressione seguente restituisce true :
typeof 'qwe' === 'string'
L'espressione seguente restituisce false (sic!):
typeof new String('qwe') === 'string'
L'espressione seguente restituisce true :
typeof new String('qwe').valueOf() === 'string'
Modo migliore e giusto ( imho ):
if (someVariable.constructor === String) {
...
}
Oggi credo che sia preferito usare una forma funzione di typeof () quindi ...
if(filename === undefined || typeof(filename) !== "string" || filename === "") {
console.log("no filename aborted.");
return;
}
typeof
, stai solo controllando l'ordine delle operazioni con quelle parentesi. Alcune persone potrebbero trovarlo più leggibile in determinate circostanze.
filename
raggruppano solo una singola istruzione e sono quindi inutili ed estranee. È una buona cosa che questa risposta abbia un punteggio di 0 perché è sbagliata, fuorviante e inutile; sarebbe meglio se avesse un punteggio negativo.
controlla null o indefinito in tutti i casi a_string
if (a_string && typeof a_string === 'string') {
// this is a string and it is not null or undefined.
}
typeof null
e typeof undefined
non tornerà mai più 'string'
, quindi typeof a_string
è abbastanza. Ci scusiamo per il necropostaggio
Il mio approccio personale, che sembra funzionare in tutti i casi, sta testando la presenza di membri che saranno tutti presenti solo per le stringhe.
function isString(x) {
return (typeof x == 'string' || typeof x == 'object' && x.toUpperCase && x.substr && x.charAt && x.trim && x.replace ? true : false);
}
Vedi: http://jsfiddle.net/x75uy0o6/
Mi piacerebbe sapere se questo metodo ha dei difetti, ma mi ha servito bene per anni.