Answers:
您接近:
if (typeof a_string === 'string') {
// this is a string
}
相关说明:如果使用创建的字符串new String('hello')
作为类型,则上述检查将不起作用Object
。有很多复杂的解决方案可以解决此问题,但是最好避免以这种方式创建字符串。
if(typeof(str) === typeof(String()))
该typeof
运营商不中缀(所以你的榜样的LHS没有意义)。
您需要像这样使用它...
if (typeof a_string == 'string') {
// This is a string.
}
请记住,typeof
是运算符,而不是函数。尽管如此,您会发现typeof(var)
在野外经常使用它。这和一样有意义var a = 4 + (1)
。
另外,==
由于两个操作数均为String
s(typeof
始终返回a String
),因此您也可以使用(相等比较运算符),JavaScript被定义为执行与我使用的相同步骤===
(严格比较运算符)。
您可以使用...进行检测。
var isString = str instanceof String;
...要么...
var isString = str.constructor == String;
但这在多window
环境下无法工作(认为iframe
)。
您可以通过...解决此问题
var isString = Object.prototype.toString.call(str) == '[object String]';
但是,再次(如Box9所述),最好只使用文字String
格式,例如var str = 'I am a string';
。
if(myVar.toUpperCase) alert('I am a string');
?请参阅:jsfiddle.net/tb3t4nsx
{ toUpperCase: '' }
现在,我相信最好使用typeof()的函数形式,以便...
if(filename === undefined || typeof(filename) !== "string" || filename === "") {
console.log("no filename aborted.");
return;
}
typeof
,您只是用这些括号控制操作的顺序。在某些情况下,某些人可能会觉得它更具可读性。
filename
仅将单个语句组合在一起,因此是无用和多余的。好的答案是0分,因为它是错误的,误导性的和无助的;如果分数为负数会更好。
我的个人方法似乎适用于所有情况,它正在测试是否只存在字符串的成员。
function isString(x) {
return (typeof x == 'string' || typeof x == 'object' && x.toUpperCase && x.substr && x.charAt && x.trim && x.replace ? true : false);
}
请参阅:http://jsfiddle.net/x75uy0o6/
我想知道这种方法是否有缺陷,但是多年来一直为我服务。