问题
How can I check if a var is a string in JavaScript?
I've tried this and it doesn't work...
var a_string = "Hello, I'm a string.";
if (a_string typeof 'string') {
// this is a string
}
回答1:
You were close:
if (typeof a_string === 'string') {
// this is a string
}
On a related note: the above check won't work if a string is created with new String('hello')
as the type will be Object
instead. There are complicated solutions to work around this, but it's better to just avoid creating strings that way, ever.
回答2:
The typeof operator isn't an infix (so the LHS of your example doesn't make sense).
You need to use it like so...
if (typeof a_string == 'string') {
// This is a string.
}
Remember, typeof
is an operator, not a function. Despite this, you will see typeof(var)
being used a lot in the wild. This makes as much sense as var a = 4 + (1)
.
Also, you may as well use ==
(equality comparison operator) since both operands are String
s (typeof
always returns a String
), JavaScript is defined to perform the same steps had I used ===
(strict comparison operator).
As Box9 mentions, this won't detect a instantiated String
object.
You can detect for that with....
var isString = str instanceof String;
jsFiddle.
...or...
var isString = str.constructor == String;
jsFiddle.
But this won't work in a multi window
environment (think iframe
s).
You can get around this with...
var isString = Object.prototype.toString.call(str) == '[object String]';
jsFiddle.
But again, (as Box9 mentions), you are better off just using the literal String
format, e.g. var str = 'I am a string';
.
Further Reading.
回答3:
Combining the previous answers provides these solutions:
if (typeof str == 'string' || str instanceof String)
or
Object.prototype.toString.call(str) == '[object String]'
回答4:
Following expression returns true:
'qwe'.constructor === String
Following expression returns true:
typeof 'qwe' === 'string'
Following expression returns false (sic!):
typeof new String('qwe') === 'string'
Following expression returns true:
typeof new String('qwe').valueOf() === 'string'
Best and right way (imho):
if (someVariable.constructor === String) {
...
}
回答5:
Now days I believe it's preferred to use a function form of typeof() so...
if(filename === undefined || typeof(filename) !== "string" || filename === "") {
console.log("no filename aborted.");
return;
}
回答6:
check for null or undefined in all cases a_string
if (a_string && typeof a_string === 'string') {
// this is a string and it is not null or undefined.
}
回答7:
My personal approach, which seems to work for all cases, is testing for the presence of members that will all only be present for strings.
function isString(x) {
return (typeof x == 'string' || typeof x == 'object' && x.toUpperCase && x.substr && x.charAt && x.trim && x.replace ? true : false);
}
See: http://jsfiddle.net/x75uy0o6/
I'd like to know if this method has flaws, but it has served me well for years.
来源:https://stackoverflow.com/questions/6286542/how-can-i-check-if-a-var-is-a-string-in-javascript